记录下来怕自己忘记
问题描述:
2个单链表(singly linked list),每一个节点里面一个0-9的数字,输入就相当于两个大数了。然后返回这两个数的和(一个新list)。这两个输入的list 长度相等。 要求是:1. 不用递归。2. 要求算法在最好的情况下,只遍历两个list一次,最差的情况下两遍。
条件: 从高到低位存储大数。空间复杂度O(1)
记两个单链表分别为a,b; 长度为n ,存储结构的单链表为c
分析:因为要求只能遍历list最多两次,且不能回头,所以只能是使用指针来记录因为进位而导致值更改的位置了~
a,b对应节点之和的情况只有3中,sum <9,sum = 9,sum >9
<9 时,直接赋值,当前指针pc前进,记录指针p也前进
= 9 时,要注意,意味着记录指针p不能移动(此时p指向的是<9的节点),pc前进
>9时,意味着要进位,从p到pc间的所有节点更新值。
伪代码如下:
//初始化一个单链表c,长度n+1 ,节点初始值为0#。。。。其实应该边算边new 节点的哈……
linkedlist c = new linkedlist(n+1,0)
node * p = c.head,*pc = c.head
node * pa = a.head,*pb = b.head
pc = pc->next
while(pc)
sum = pa->value +pb->value
if sum < 9
pc->value = sum
p = pc
pc = pc->next
else if sum ==9
pc = pc->next
else
pc->value = sum%10
p->value = p->value +1
do
p = p->next
p->value = 0
while(p->next != pc);
#endwhile
if c.head->value ==0
node *tmp = c.head
c.head = c.head->next
delete *tmp
例如
a: 4 4 4 4 0
b: 5 5 5 8 1
c: x 9 9 9 12
p pc
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。