LeetCode 第二题:两数相加--C++/Python3

今天做这个第二题,就卡在对链表知识不够熟悉,似懂非懂,了解的不够透彻!!

接下来就记录程序代码,来加深对链表的熟悉:

1、两数相加--C++:

主要思想:按照按位相加,判断进位情况,来输出相应的结果


/**
 * Definition for singly-linked list.
 * struct ListNode {//这里给出C++中的链表的定义,有两个值:val数值,next指针
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode* result=NULL;//创建最终输出结果的链表指针头
        
        int sum = ((l1!=NULL)?l1->val:0)+((l2!=NULL)?l2->val:0);
        int temp=sum/10;
        result=new ListNode(sum%10);
        ListNode *l=result;//因为要顺位输出,所以result指向指针头不变,但同时还要队指针直接增添成员,所以创建新的链表指针
        /*即固定输出指针始终在指针头,赋值指针随链表游走*/
            
        l1=l1!=NULL?l1->next:NULL;
        l2=l2!=NULL?l2->next:NULL;
        
        while(l1!=NULL||l2!=NULL){
            int num = ((l1!=NULL)?l1->val:0)+((l2!=NULL)?l2->val:0)+temp;
            temp=num/10;
            
            ListNode *ltemp=new ListNode(num%10);//中间过渡指针,用来赋值
            l->next=ltemp;
            l=ltemp;
            
            l1=l1!=NULL?l1->next:NULL;
            l2=l2!=NULL?l2->next:NULL;
        }
        if (temp == 1) {//检验:最高位相加结束后,判断是否有进位
            ListNode *ltemp=new ListNode(temp);
            l->next=ltemp;
            l=ltemp;
        }
        return result;
    }
};

2、两数相加--Python3:

不知道Python中有没有?的用法,所以这里分两种情况,当l1和l2属于同长度部分,当l1和l2属于不同长度部分

其他部分与C++中的一样:即固定输出指针,赋值指针随链表游走。

注意一点区别:C++中我们忽略了头指针,但是Python是从头指针开始,所以return result.next

# Definition for singly-linked list.
#class ListNode:
#    def __init__(self, x):
#        self.val = x
#        self.next = None

class Solution:
    def addTwoNumbers(self, l1, l2):
        """
        :type l1: ListNode
        :type l2: ListNode
        :rtype: ListNode
        """
        p=result=ListNode (-1)
        temp=0
        while l1 and l2:#当l1和l2属于同长度部分
            sum=l1.val+l2.val+temp
            temp=int(sum/10)
            ptemp=ListNode(sum%10)
            p.next=ptemp
            
            p=p.next
            l1=l1.next
            l2=l2.next
            
        temp1=l1 or l2
            
        while temp1:#当l1和l2属于不同长度部分
            sum=temp1.val+temp
            temp=int(sum/10)
            ptemp=ListNode(sum%10)
            p.next=ptemp
            
            p=p.next
            temp1=temp1.next
        if temp:
            p.next=ListNode(temp)
        return result.next



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值