力扣(LeetCode)2.两数相加 C/C++/Python3/Java[全忘了重新学代码]

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

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


C语言、C++

需要注意的是,由于结构体内存在next指针,而申请结构体空间后同时定义了next指针,此时next指针未指向任何空间,需要定义为NULL,否则过不了编译。

struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
    struct ListNode* end1,*end2,*head,*node,*p;
    head=(struct ListNode*)malloc(sizeof(struct ListNode)); //创建头节点
    head->next=NULL;
    p=head;
    int t,x=0;
    end1=l1;
    end2=l2;
    while(end1!=NULL&&end2!=NULL){
        t=end1->val+end2->val;
        t+=x;
        if(t>=10){
            t=t%10;
            x=1;
        }
        else
            x=0;
        node=(struct ListNode*)malloc(sizeof(struct ListNode));
        node->next=NULL;
        node->val=t;
        p->next=node;
        p=node;
        end1=end1->next;
        end2=end2->next;
    }
    while(end1!=NULL){
            t=end1->val+x;
            if(t>=10){
                t=t%10;
                x=1;
             }
            else
                x=0;
            node=(struct ListNode*)malloc(sizeof(struct ListNode));
            node->val=t;
            node->next=NULL;
            p->next=node;
            p=node;
            end1=end1->next;
        }

    while(end2!=NULL){
            t=end2->val+x;
            if(t>=10){
            t=t%10;
            x=1;
            }
            else
                x=0;
       
            node=(struct ListNode*)malloc(sizeof(struct ListNode));
            node->val=t;
            node->next=NULL;
            p->next=node;
            p=node;
            end2=end2->next;
        }

    if(x){
        node=(struct ListNode*)malloc(sizeof(struct ListNode));
        node->val=1;
        node->next=NULL;
        p->next=node;
    }
    return head->next;
}

Python3

python3三目运算

为真时的结果 if 判断条件 else 为假时的结果(注意,没有冒号)
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        result=ListNode()
        p=result
        x=0
        while l1 or l2:
            a=l1.val if l1 else 0
            b=l2.val if l2 else 0
            t=a+b+x
            x=t//10
            p.next=ListNode(t%10)
            p=p.next
            if l1!=None :
                l1=l1.next
            if l2!=None:
                l2=l2.next

        if x:
            p.next=ListNode(1)

        return result.next

JAVA

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode head =new ListNode(0);
        ListNode p=head;
        int carry =0;
        int t,a,b;
    while(l1!=null||l2!=null){
        a=(l1!=null?l1.val:0);
        b=(l2!=null?l2.val:0);
        t=a+b+carry;
        carry=t/10;
        ListNode node=new ListNode(t%10,null);
        p.next=node;
        p=node;

        if(l1!=null)
            l1=l1.next;
        if(l2!=null)
            l2=l2.next;
    }
    if(carry!=0){
            ListNode node=new ListNode(1,null);
            p.next=node;
        }

    return head.next;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值