zoukankan      html  css  js  c++  java
  • C语言链表之两数相加

    题目描述

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

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

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

    示例

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

    题目要求

     1 /**
     2  * Definition for singly-linked list.
     3  * struct ListNode {
     4  *     int val;
     5  *     struct ListNode *next;
     6  * };
     7  */
     8 
     9 
    10 struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
    11 }

    题解

     1 /**
     2  * Definition for singly-linked list.
     3  * struct ListNode {
     4  *     int val;
     5  *     struct ListNode *next;
     6  * };
     7  */
     8 
     9 
    10 struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
    11     int temp=0;
    12     struct ListNode *p1=l1;
    13     struct ListNode *p2=l2;
    14     struct ListNode *p3 = (struct ListNode*)malloc(sizeof(struct ListNode));
    15     struct ListNode *l3=p3;
    16     for(int i=0;;i++){
    17         if(p1==NULL&&p2==NULL){//两数结束
    18             if(temp==1){//判断进位
    19                 struct ListNode *p4 = (struct ListNode*)malloc(sizeof(struct ListNode));
    20                 p4->val=1;
    21                 p4->next=NULL;
    22                 p3->next=p4;
    23                 p3=p4;
    24             }
    25             break;
    26         }
    27         else if(p1==NULL){//数一结束
    28             while(p2!=NULL){
    29                 struct ListNode *p4= (struct ListNode*)malloc(sizeof(struct ListNode));
    30                 int sum=p2->val+temp;
    31                 temp=sum/10;
    32                 sum%=10;
    33                 p4->val=sum;
    34                 p4->next=NULL;
    35                 p3->next=p4;
    36                 p3=p4;
    37                 p2=p2->next;
    38                 if(p2==NULL)break;
    39             }
    40             if(temp!=0){//数二也结束后判断进位
    41                 struct ListNode *p4= (struct ListNode*)malloc(sizeof(struct ListNode));
    42                 p4->val=1;
    43                 p4->next=NULL;
    44                 p3->next=p4;
    45             }
    46             break;
    47         }
    48         else if(p2==NULL){
    49             while(1){
    50                 struct ListNode *p4= (struct ListNode*)malloc(sizeof(struct ListNode));
    51                 int sum=p1->val+temp;
    52                 temp=sum/10;
    53                 sum%=10;
    54                 p4->val=sum;
    55                 p4->next=NULL;
    56                 p3->next=p4;
    57                 p3=p4;
    58                 p1=p1->next;
    59                 if(p1==NULL)break;
    60             }
    61             if(temp!=0){
    62                 struct ListNode *p4= (struct ListNode*)malloc(sizeof(struct ListNode));
    63                 p4->val=1;
    64                 p4->next=NULL;
    65                 p3->next=p4;
    66             }
    67             break;
    68         }
           //两数都未结束,正常相加
    69 int sum=p1->val+p2->val+temp; 70 temp=sum/10; 71 sum%=10; 72 struct ListNode *p4 = (struct ListNode*)malloc(sizeof(struct ListNode)); 73 p4->val=sum; 74 p4->next=NULL; 75 p3->next=p4; 76 p3=p4; 77 p1=p1->next; 78 p2=p2->next; 79 } 80 return l3->next; 81 }

    1.malloc

    用于动态分配内存,用法为:

    int *p = (int *)malloc(sizeof(int))

    char *ch = (char *)malloc(sizeof(char))

    返回一个指针,当资源不足无法分配时返回NULL

    可用free()释放内存,用法为:

    free(p)

    free(ch)

    2..链表

    第一次写链表,只涉及了链表末端的节点添加,以后继续学习删除、插入、连接等操作,感觉不难,只是在玩IQ题,不过......链表还是得继续好好刷题!

    该题的链表节点包括了节点值和下一个节点的位置两个内容,节点值可以是整型、数组等一个或多个变量,下一个节点的位置用p->next引用,但是p->next->value是错误的。

    本题需要注意的点是在两数相加时、一数结束时、两数都结束时判断是否需要进一位。

    题目来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/add-two-numbers
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

  • 相关阅读:
    【二次开发】shopxo商城
    经典的PHPer为什么被认为是草根?
    PowerDesigner生成Access数据库
    NET开发学习项目资源
    ASP.NET程序开发范例宝典
    Web.Config文件配置小记
    NET开发学习项目资源(2)
    VS 2010一步步开发windows服务(windows service)
    jquery.mobile手机网页简要
    Android置底一个View后运行报错
  • 原文地址:https://www.cnblogs.com/shi-champion/p/11649258.html
Copyright © 2011-2022 走看看