题目描述
做法思路
似乎比昨天的题更简单,解法单一,遍历链表即可。直接开干:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
struct ListNode *p,*q,*t;
p=l1;q=l2;
while(p!= NULL&&q!=NULL){
if(p->val+q->val<10) {p->val=p->val+q->val;}
else {
p->val=p->val+q->val-10;
if(p->next!=NULL) p->next->val++;
else if(q->next!=NULL) p->next->val++;
else {
t = (struct ListNode*)malloc(sizeof(struct ListNode));
t->val=1;
p->next=t;
}
}
p=p->next;q=q->next;
}
if(q==NULL) return l1;
else {
p=l1;
while(p->next!=NULL){
p=p->next;
}
p->next=q->next;
return l1;
}
}
提交后发现虽考虑到边界处理,却仍未处理末位进一变10的情况,即若长链表连续进位,实在不便处理,看来开始想的省空间想法不可取,得开辟新链表记录。