今天做这个第二题,就卡在对链表知识不够熟悉,似懂非懂,了解的不够透彻!!
接下来就记录程序代码,来加深对链表的熟悉:
1、两数相加--C++:
主要思想:按照按位相加,判断进位情况,来输出相应的结果
/**
* Definition for singly-linked list.
* struct ListNode {//这里给出C++中的链表的定义,有两个值:val数值,next指针
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* result=NULL;//创建最终输出结果的链表指针头
int sum = ((l1!=NULL)?l1->val:0)+((l2!=NULL)?l2->val:0);
int temp=sum/10;
result=new ListNode(sum%10);
ListNode *l=result;//因为要顺位输出,所以result指向指针头不变,但同时还要队指针直接增添成员,所以创建新的链表指针
/*即固定输出指针始终在指针头,赋值指针随链表游走*/
l1=l1!=NULL?l1->next:NULL;
l2=l2!=NULL?l2->next:NULL;
while(l1!=NULL||l2!=NULL){
int num = ((l1!=NULL)?l1->val:0)+((l2!=NULL)?l2->val:0)+temp;
temp=num/10;
ListNode *ltemp=new ListNode(num%10);//中间过渡指针,用来赋值
l->next=ltemp;
l=ltemp;
l1=l1!=NULL?l1->next:NULL;
l2=l2!=NULL?l2->next:NULL;
}
if (temp == 1) {//检验:最高位相加结束后,判断是否有进位
ListNode *ltemp=new ListNode(temp);
l->next=ltemp;
l=ltemp;
}
return result;
}
};
2、两数相加--Python3:
不知道Python中有没有?的用法,所以这里分两种情况,当l1和l2属于同长度部分,当l1和l2属于不同长度部分
其他部分与C++中的一样:即固定输出指针,赋值指针随链表游走。
注意一点区别:C++中我们忽略了头指针,但是Python是从头指针开始,所以return result.next。
# Definition for singly-linked list.
#class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def addTwoNumbers(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
p=result=ListNode (-1)
temp=0
while l1 and l2:#当l1和l2属于同长度部分
sum=l1.val+l2.val+temp
temp=int(sum/10)
ptemp=ListNode(sum%10)
p.next=ptemp
p=p.next
l1=l1.next
l2=l2.next
temp1=l1 or l2
while temp1:#当l1和l2属于不同长度部分
sum=temp1.val+temp
temp=int(sum/10)
ptemp=ListNode(sum%10)
p.next=ptemp
p=p.next
temp1=temp1.next
if temp:
p.next=ListNode(temp)
return result.next