主要先要理清逻辑的关系:
1、先建立一个虚拟头结点
2、循环判断条件:两两交换必须要是节点的下一个和节点的下下个才能交换
3、循环里的逻辑
具体代码如下:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def swapPairs(self, head: ListNode) -> ListNode:
#先创建虚拟节点
res = ListNode(next=head)
#理解为起一个别名,之后对pre操作,pre中的指针指向变化,而res中保持不变,最后返回res
pre = res
# 必须有pre的下一个和下下个才能交换,否则说明已经交换结束了
while pre.next and pre.next.next:
cur = pre.next #下一节点
post = pre.next.next #下下节点
# pre,cur,post对应最左,中间的,最右边的节点,为了方便理解,分别为1,2,3节点
#主要是一下代码的逻辑,要从后往前的更新节点指向
cur.next = post.next #第2个节点的下一节点指到第3个节点之后(也就是第4个节点)
post.next = cur #第3个节点的下一节点指向第2个节点
pre.next = post #第1个几点指向第3个节点
pre = pre.next.next #更新第1个节点的指向
return res.next #最后返回res