题目:Given a linked list, swap every two adjacent nodes and return its head. You may not modify the values in the list's nodes, only nodes itself may be changed. (大意:相邻位置的两个节点进行值交换,但是要求以节点为单位进行交换。)
先上代码,只能把逻辑实现,无力考虑性能,见谅。
class Solution:
def swapPairs(self, head: 'ListNode') -> 'ListNode':
if not head or not head.next:
return head
re=tmp=head.next
p=tmp.next
tmp.next=head
tmp=tmp.next
while p:
q=p.next
if q:
tmp_p=q.next
tmp.next=q
q.next=p
tmp=tmp.next
tmp=tmp.next
p=tmp_p
else:
tmp.next=p
break
else:
tmp.next=None
return re
以上是最终代码,最初的版本运行不成功(最开始的版本里面while循环后面没有跟else子句),一直提示超时。下面是分析:
首先在未进入while循环之前,指针结构如图所示:
如果在此时输出进行以Re开头的链表是一个循环链表,这也是前面说的超时的原因。当链表中节点个数为偶数时,while循环结束时产生的链表就是一个循环链表。当链表中的节点个数为奇数时,则不会出现这种情况。为了处理偶数个数的节点产生循环链表的情况,所以给while语句加一个else子句,把最后一个节点的next属性指向None.