码迷,mamicode.com
首页 > 其他好文 > 详细

【LeetCode】Add Two Numbers(两数相加)

时间:2018-11-16 23:29:51      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:play   拓展   sdn   filter   handler   val   空间   size   aaa   

这道题是LeetCode里的第2到题。

这道题的条件判断很简单,如下:

1.是否为尾节点

2.是否产生进位

3.是否等于9

4.是否需要拓展空间

 

代码如下:

ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
	ListNode *p = l1, *q = l2;
	int add, carry = 0;//carry标志进位

	while (1) {
		add = p->val + q->val + carry;
		p->val = add % 10;
		if (add > 9)carry = 1;
		else carry = 0;
		if (p->next == NULL || q->next == NULL)break;//直到最后一个节点
		p = p->next;
		q = q->next;
	}

    //这里就相当于是一个链表只有一个节点,另一个链表加上这个一个节点的数值
	if (p->next) {//list1
		p = p->next;
		q = p;
		while (carry) {//是否需要进位
			if (q->val == 9) {//是否等于9
				if (q->next == NULL) {//是否是最后一个节点
					q->val = 0;
					q->next = (ListNode*)malloc(sizeof(ListNode));
					q->next->val = 1;
					q->next->next = NULL;
					break;
				}
				q->val = 0;
				q = q->next;}
			else {q->val++;carry = 0;}
		}
		return l1;
	}

	if (q->next) {//list2
		q = q->next;
		list2 = q;//
		while (carry) {
			if (q->val == 9) {
				if (q->next == NULL) {
					q->val = 0;
					q->next = (ListNode*)malloc(sizeof(ListNode));
					q->next->val = 1;
					q->next->next = NULL;
					break;
				}
				q->val = 0;
				q = q->next;}
			else {q->val++;carry = 0;}
		}
		p->next = l2;
		return l1;
	}

	if (carry) {
		q = (ListNode*)malloc(sizeof(ListNode));
		q->next = NULL;
		q->val = 1;
		p->next = q;
	}
	return l1;
}

运行结果

技术分享图片技术分享图片?

 

个人总结:在设计算法初期,造成了许多代码的累赘,以上代码是经过优化后得到的。但是在这里两个if条件中还是会有代码的重复,但能够做出来我就已经很开心了。(^-^)V

  

【LeetCode】Add Two Numbers(两数相加)

标签:play   拓展   sdn   filter   handler   val   空间   size   aaa   

原文地址:https://www.cnblogs.com/1000sakura/p/9972014.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!