2. 两数之和 Two Sum

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

你可以假设除了数字 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;
                
    }
};


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值