提升代码能力第二天

Leetcode-2

题目

在这里插入图片描述
在这里插入图片描述

首先要看清链表的定义
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};

思路

建立哑结点(即答案中一开始的list,注意最后返回的是list的next),由于两个指针可能数量不相同,所以只要l1和l2中任意一个不为空就能进入循环,若有一个为空则值设为0。当前位的值为sum%10,下一位进位sum/10。循环外最后一位要判断是否有进位,有进位也最多为1。
在这里插入图片描述

代码

class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode*list = new ListNode(0);
        ListNode*cur=list;
        int carry = 0;
        while(l1||l2){//不全为空即可
           int val1 = l1 ? l1 -> val : 0;
           int val2 = l2 ? l2 -> val : 0;
           int sum = val1 + val2 + carry;
           cur -> next =new ListNode(sum % 10);
           carry = sum / 10;
           cur = cur ->next;
           if(l1) l1 =l1 -> next;
           if(l2) l2 =l2 -> next;
        }
        if(carry) cur -> next = new ListNode(1);
        return list -> next;
    }
};

噢真的链表都没认真学过,看到链表第一反应就是拒绝很抵触,其实原理还是挺清楚的,就是之前关于链表的作业几乎没有做对过,心理阴影太大了,明天开始针对性锻炼一下有关链表的题目。

发布了4 篇原创文章 · 获赞 0 · 访问量 74

猜你喜欢

转载自blog.csdn.net/Sophia2333333331/article/details/105376171
今日推荐