题目:

解法1:
举例来说,给定链表如下(我们实现2和1的交换):
-
先在现有链表的头结点前面添加一个dummy结点,因为如果现有头结点1被删除或被移动了,需要1前面的dummy结点来记录位置。
-
首先把结点1和3连接到一起,因为如果先操作2和3,那么断开连接后就无法再对3操作了。
pre.next.next = p.next
-
然后把结点2和结点1连接。
p.next = pre.next
-
之后把dummy结点-1和结点2连接到一起。
pre.next = p
-
此时已经完成了结点2和结点1的交换,接下来要交换3和4,所以现在移动指针pre和指针p。pre指针移动到结点3前一个结点,即结点1。
pre = temp.next
具体代码如下:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def swapPairs(self, head: ListNode) -> ListNode:
dummyhead = ListNode(0)
dummyhead.next = head # 创建哑结点在头结点之前
pre = dummyhead
p = head
while p is not None and p.next is not None:
temp = p.next
p.next = temp.next # 1和3连接
temp.next = pre.next # 2和1连接
pre.next = temp # 哑结点和2连接
pre = p
p = p.next
return dummyhead.next
网友评论