给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
C语言、C++
需要注意的是,由于结构体内存在next指针,而申请结构体空间后同时定义了next指针,此时next指针未指向任何空间,需要定义为NULL,否则过不了编译。
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
struct ListNode* end1,*end2,*head,*node,*p;
head=(struct ListNode*)malloc(sizeof(struct ListNode)); //创建头节点
head->next=NULL;
p=head;
int t,x=0;
end1=l1;
end2=l2;
while(end1!=NULL&&end2!=NULL){
t=end1->val+end2->val;
t+=x;
if(t>=10){
t=t%10;
x=1;
}
else
x=0;
node=(struct ListNode*)malloc(sizeof(struct ListNode));
node->next=NULL;
node->val=t;
p->next=node;
p=node;
end1=end1->next;
end2=end2->next;
}
while(end1!=NULL){
t=end1->val+x;
if(t>=10){
t=t%10;
x=1;
}
else
x=0;
node=(struct ListNode*)malloc(sizeof(struct ListNode));
node->val=t;
node->next=NULL;
p->next=node;
p=node;
end1=end1->next;
}
while(end2!=NULL){
t=end2->val+x;
if(t>=10){
t=t%10;
x=1;
}
else
x=0;
node=(struct ListNode*)malloc(sizeof(struct ListNode));
node->val=t;
node->next=NULL;
p->next=node;
p=node;
end2=end2->next;
}
if(x){
node=(struct ListNode*)malloc(sizeof(struct ListNode));
node->val=1;
node->next=NULL;
p->next=node;
}
return head->next;
}
Python3
python3三目运算
为真时的结果 if 判断条件 else 为假时的结果(注意,没有冒号)
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
result=ListNode()
p=result
x=0
while l1 or l2:
a=l1.val if l1 else 0
b=l2.val if l2 else 0
t=a+b+x
x=t//10
p.next=ListNode(t%10)
p=p.next
if l1!=None :
l1=l1.next
if l2!=None:
l2=l2.next
if x:
p.next=ListNode(1)
return result.next
JAVA
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode head =new ListNode(0);
ListNode p=head;
int carry =0;
int t,a,b;
while(l1!=null||l2!=null){
a=(l1!=null?l1.val:0);
b=(l2!=null?l2.val:0);
t=a+b+carry;
carry=t/10;
ListNode node=new ListNode(t%10,null);
p.next=node;
p=node;
if(l1!=null)
l1=l1.next;
if(l2!=null)
l2=l2.next;
}
if(carry!=0){
ListNode node=new ListNode(1,null);
p.next=node;
}
return head.next;
}
}