应用题-链表专题-两两交换链表中的节点
**链表题目很重要的一点: 不要丢了前驱和后继信息。**
```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: Optional[ListNode]) -> Optional[ListNode]:
if not head: return None
if not head.next: return head
prv = None # prv表示已处理的链尾部
cur1 = head
cur2 = cur1.next # cur1和cur2相邻 交换cur1和cur2
nxt = cur2.next # nxt表示未处理的链首部
# 更新head
head = cur2
while cur2:
# 将cur1和cur2分离出来
if prv: prv.next = None
cur1.next = None
cur2.next = None
# 交换cur1和cur2
cur2.next = cur1
# 重新链接
if prv: prv.next = cur2
cur1.next = nxt
# 更新记录值
prv = cur1
cur1 = cur1.next
cur2 = cur1.next if cur1 else None
nxt = cur2.next if cur2 else None
return head
```