一,题目
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
二,分析:
1,明确输入输出
输入:两个单调递增的链表
输出:合成后的链表(满足单调不减规则)
三,代码实现
四,代码分析
top=None
if pHead1.val<pHead2.val:
Top=pHead1
else:
Top=pHead2
这段代码做了一个指针Top,两个链表谁的头部小,Top就指向谁,如图:
up=pHead1
down=pHead2
if Top==pHead1:
up=up.next
else:
down=down.next
这段代码接着做了两个指针,先分别指向两个链表的头部,接着看Top指在了哪里,若Top指向第一个链表,则up给Top让位,自己往后挪一个位置。
while up and down:
if up.val<down.val:
pre.next=up
pre=up
up=up.next
else:
pre.next=down
pre=down
down=down.next
这段代码做了一个指针pre=Top,接着,实现了while循环,如图:
我们先比较up和down指向数值的大小,栗子中是down小,就让pre指向的方框后面的那个箭头指向down。 pre.next可以理解为方框指向别人的那个箭头。
接着pre去down那里,down往后移一格
注意这里
pre=down
down=down.next
这两行代码的前后顺序不能搞混,一定要先移pre,再移down。不然会出现这种情况:
先移down再移pre就会导致 最后程序运算超时
继续跑while循环
跑跑跑。。。
一直到:up指到了None上,跳出了while循环
if up==None:
pre.next=down
else:
pre.next=up
如果up指到了None上,就让pre后面的箭头指向down的那一项,如图:
于是,返回Top,结束