Add Two Numbers

You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8

 

题目比较简单,不过为不同长度的数相加提供了一种思路:把数的链表先反转,然后再从前往后加,进位时向下一个节点的数据和加1.

 

    void tail(ListNode *l2,int temp){  //结尾数据进位的处理
	    while(true){
		 if(l2->next==NULL){
			    if(temp==1){
				    ListNode *c = new ListNode (1);  //这里要在堆里面分配内存,否则函数退出会被回收
				    l2->next = c;
		                 }
			   break;
		}else{  //可能会一直进位
			int a=(l2->next->val+temp)%10;
			temp=(l2->next->val+temp)/10;
			l2->next->val=a;
			l2=l2->next;
		 }
	    }
    }

    ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {
	    ListNode *p=l1;
	    int temp=0;
	    while(true){
		    int current=( l1->val+l2->val+temp)%10;
		    temp=( l1->val+l2->val+temp)/10;
		    l1->val=current;
		    if(l1->next!=NULL&&l2->next!=NULL){
			    l1=l1->next;l2=l2->next;
		    }else
			    break;
	    }
	    if(l1->next==NULL&&l2->next==NULL){  //二者一样长
		    if(temp==1){
			    ListNode *c = new ListNode (1);
			    l1->next=c;
		    }
	    }else if(l1->next==NULL){  //l2长于l1,先将l2连到l1上在处理尾巴
		    int c=(l2->next->val+temp)%10;
		    temp=(l2->next->val+temp)/10;
		    l2->next->val=c;
		    l1->next=l2->next;
		    l2=l2->next;
		    tail(l2,temp);
	    }else  //l1长于l2
		    tail(l1,temp);
	    return p;
    };

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值