2. 两数之和 Two Sum

本文介绍了一种使用链表表示非负整数并进行加法运算的方法。通过逆序存储位数,每次迭代处理一个数字,利用进位机制完成加法,并返回新的链表结果。

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

给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。

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

 

 

解:

链表的每一个节点应该都是一个对象,期中data存储的就是这一项的值,next项存储的应该是下一个节点的位置。

对于python来讲,next直接就可以赋值成一个对象。data的值是int或者什么别的,next是对象。

 

与C不同的是,在python中是没有NULL的,取而代之的是None,它的含义是为空,但要注意和空列表与空字符串是不一样的,None的类型是Nonetype。

 

#############################从这里就改用c++了

/**
 * 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 *dummyHead = new ListNode(0);            //赋初值的时候加一个*表示这是个指针,然后后面跟的是地址

                                                                                      //也就是int *i = 某指针,赋初值可能只能用指针赋初值
        ListNode *p =l1 ; 
        ListNode *q = l2; 
        ListNode *curr = dummyHead;

        //不过这里的写法非常好,因为动用了指针的关系,所以不能直接传什么用什么,还要先倒一步,反正指针不占地方
        
        int carry =0;

        //加法题总是这样的,每一次都用到了对10取整算进位值,取余算个位值


        while(p!=NULL || q!=NULL){
            int x = (p!=NULL)? p->val :0;              // ?问号的用法很好,意思是如果之前的()里面成立,就赋值第二个,不成立三
            int y =(q!=NULL)? q->val :0;               // 由于这个问号的写法避免了给数赋值情况下很多的if/else
            
            int sum = x + y + carry;
            
            carry = sum/10;
            

            //这里赋值给下一个的用法想明白了,一开始的时候无论如何都会存在一个,那后面的指针节点都是生成的,规则是每一

            //次要赋值的时候就生成一个,所以要么前面空一个要么末尾空一个,很精妙
            curr->next = new ListNode(sum%10);         //这里的生成新节点只能背一下了吧
            if(p!=NULL) p=p->next;                              //三个节点的各自移位
            if(q!=NULL) q =q->next;
            curr = curr->next;
            
        }
            if(carry!=0) curr->next = new ListNode(carry);
            return dummyHead->next;
                
    }
};


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值