我是靠谱客的博主 单薄太阳,最近开发中收集的这篇文章主要介绍面试题 02.05. 链表求和,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

面试题 02.05. 链表求和

给定两个用链表表示的整数,每个节点包含一个数位。

这些数位是反向存放的,也就是个位排在链表首部。

编写函数对这两个整数求和,并用链表形式返回结果。

示例:

输入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295
输出:2 -> 1 -> 9,即912

进阶:思考一下,假设这些数位是正向存放的,又该如何解决呢?

示例:

输入:(6 -> 1 -> 7) + (2 -> 9 -> 5),即617 + 295
输出:9 -> 1 -> 2,即912

今天,我们写一个链表求和,说句实在的,这题思路简单但是代码比较复杂,自己代码写的也是挺复杂,解题代码如下:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
    int r=0;
    struct ListNode* pre,*p=l1;

    while(l1&&l2){
        l1->val=l1->val+l2->val+r;
        r=0;
        if(l1->val>=10){
            r=1;
            l1->val=l1->val-10;
        }
        pre=l1;
        l1=l1->next;
        l2=l2->next;
    }
    if(l1==NULL&&l2==NULL&&r==1){
        struct ListNode* s=(struct ListNode* )malloc(sizeof(struct ListNode));
        s->next=NULL;
        s->val=1;
        pre->next=s;

    }
    if(l1!=NULL){
         if(r==1){
            while(l1->val==9){
                l1->val=0;
                pre=l1;
                l1=l1->next;
                if(l1==NULL){
                     struct ListNode* s=(struct ListNode* )malloc(sizeof(struct ListNode));
                      s->next=NULL;
                   s->val=1;
                  pre->next=s;
                  break;

                }
            }
            if(l1!=NULL){
                l1->val=l1->val+1;
            }

        }


    }
  //    printf("%d ",r);
    if(l1==NULL&&l2!=NULL){
        pre->next=l2;
        printf("%d ",r);
        if(r==1){
            while(l2->val==9){
                l2->val=0;
                pre=l2;
                l2=l2->next;
                if(l2==NULL){
                     struct ListNode* s=(struct ListNode* )malloc(sizeof(struct ListNode));
                      s->next=NULL;
                   s->val=1;
                  pre->next=s;
                  break;

                }
            }
            if(l2!=NULL){
                l2->val=l2->val+1;
            }

        }
      
    }
    return p;
    
        

    

}

最后

以上就是单薄太阳为你收集整理的面试题 02.05. 链表求和的全部内容,希望文章能够帮你解决面试题 02.05. 链表求和所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部