您的位置:首页 > 其它

两两交换链表中的节点

2016-05-02 10:42 323 查看
题目描述:给一个链表,两两交换其中的节点,然后返回交换后的链表。

样例:给出 1->2->3->4, 你应该返回的链表是 2->1->4->3。

交换节点这个事,对摘链和链接的操作要求是比较高的。

题目本身的意思很简单了,我们在这里可以采用两个指针first和second,分别指向每次要交换的两个节点,交换之后,使得second在first前面。

为了方便操作,还是老方法,在头结点前面增加一个dummy节点。

代码可以给出了:

# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None

class Solution:
# @param head, a ListNode
# @return a ListNode
def swapPairs(self, head):
dummy = ListNode(-1)
# pre始终指向要交换的两个节点的前驱
pre = dummy
first = head
second = head.next
while second:
# 以下三行为交换过程
pre.next = second
first.next = second.next
second.next = first
# 将pre前移,为下一次交换准备
pre = first
# 调整first和second,指向下一次要交换的两个节点
first = first.next
second = first.next if first else None
return dummy.next
# Write your code here需要特别注意的是25行对于second的处理,因为很有可能first已经为空了,而空值是没有next这个属性的。
另外,以second为循环条件,也能很好的处理奇数长度链表的两两交换问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  链表