1、基础方法
思路:判断两个链表是否存在,如果存在,则计算两个链表的的val之和,用plus记录上一次的进位,pre记录tail的父节点,用于在while循环结束的时候将结果链表尾部置空。
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
struct ListNode *head = (struct ListNode *)malloc(sizeof(struct ListNode));
struct ListNode *tail = head;
struct ListNode *pre = NULL;
int plus = 0; //进位
while(l1 || l2){
int val_1 = 0;
int val_2 = 0;
if(l1) val_1 = l1->val;
if(l2) val_2 = l2->val;
int val = val_1 + val_2 + plus;
plus = 0;
if(val >= 10){
plus = 1;
val -= 10;
}
tail->val = val;
struct ListNode *temp = (struct ListNode *)malloc(sizeof(struct ListNode));
temp->next = NULL;
tail->next = temp;
pre = tail;
tail = tail->next;
if(l1 && l1->next)
l1 = l1->next;
else
l1 = NULL;
if(l2 && l2->next)
l2 = l2->next;
else
l2 = NULL;
}
if(plus){
tail->val = plus;
tail->next = NULL;
}
else{
pre->next = NULL;
}
return head;
}
本系列文章,旨在打造LeetCode题目解题方法,帮助和引导同学们开阔学习算法思路,由于个人能力和精力的局限性,也会参考其他网站的代码和思路,如有侵权,请联系本人删除。