LeetCode 两数之和(2) c++, 链表

本文详细解析了如何使用链表实现两个非负整数的加法运算,通过逆序存储位数并处理进位问题,生成新的链表表示两数之和。提供了完整的代码示例及链表操作技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

思路: 因为这个题必须使用链表来写,思路并不难,主要就是要熟悉链表和指针,然后就可以好好复习一下链表了,这些基础知识我真是完全不记得了,完全是写给智障的自己看的,问了大佬很多弱智的问题鸭。我就是要全部记下来,怕自己三天以后又忘了。

1. 链表的操作很棒的一个链接 :https://www.cnblogs.com/byonecry/p/4458821.html.

2. 首先分析这个题,链表1,链表2。如果长度一样,就要直接相加,然后考虑进位的问题,如果长度不一样,短的链表该位赋为0.

3.1  结构体中  定义 *next  是指向下一个结构体的指针;

3.2  c++中 定义一个结构体变量的方法  :  ListNode phead (0), *p = &phead ;现在的phead是一个空的头指针,必须定义一个结构体指针取其地址

3.3 指针访问结构体 用p->   ,变量访问结构体元素 用 phead.next

3.4 p->next = new ListNode(sum%10);  p=p->next;   这个为链表的常规操作,生成一个新的节点,并将其连接起来;

3.5 至于为什么是返回 phead.next,因为以上的操作已经生成了一个完整的链表,ListNode *next 里面依旧可以指向一个*next
 

代码:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
   ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode phead (0), *p = &phead;
        int sum=0;
        int a=0;  //进位
        while(l1||l2||a){ //全部为0, 才能停止循环
            int sum=(l1 ? l1->val : 0)+(l2 ? l2->val : 0)+a; //这个表示真的好棒
            a=sum/10;
           p->next = new ListNode(sum%10);
           p=p->next;
           
            l1=l1 ? l1->next : l1;  
            l2=l2 ? l2->next : l2;
        }
        
        return phead.next;
    }
};        
       

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值