更新 0024.两两交换链表中的节点.md python代码

使用变量名使交换的过程更加清晰,而不是使用之前的next.next这样可读性较差
从后往前换

pre = dummy,cur = 2, post=3
dummpy -> 1 -> 2 -> None
先把cur.next = post.next,此时链表为 1 -> None
再 post.next = cur 此时链表为 2 -> 1 -> None, dummpy -> 1 -> None
最后 pre.next = post, 此时为 dummpy -> 2 -> 1 -> None
This commit is contained in:
Eyjan_Huang
2021-08-20 03:23:30 +08:00
committed by GitHub
parent 5e3d23fa38
commit 8b94306cc6

View File

@ -160,21 +160,29 @@ class Solution {
Python
```python
# 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:
dummy = ListNode(0) #设置一个虚拟头结点
dummy.next = head
cur = dummy
while cur.next and cur.next.next:
tmp = cur.next #记录临时节点
tmp1 = cur.next.next.next #记录临时节点
res = ListNode(next=head)
pre = res
cur.next = cur.next.next #步骤一
cur.next.next = tmp #步骤二
cur.next.next.next = tmp1 #步骤三
# 必须有pre的下一个和下下个才能交换否则说明已经交换结束了
while pre.next and pre.next.next:
cur = pre.next
post = pre.next.next
cur = cur.next.next #cur移动两位准备下一轮交换
return dummy.next
# precurpost对应最左中间的最右边的节点
cur.next = post.next
post.next = cur
pre.next = post
pre = pre.next.next
return res.next
```
Go