题目链接
https://leetcode.cn/problems/swap-nodes-in-pairs/
题目描述
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
思路
用虚拟头结点,这样会方便很多,要不然每次针对头结点(没有前一个指针指向头结点),还要单独处理。
代码
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class Solution:
def swapPairs(self, head: ListNode) -> ListNode: #举例[0,1,2,3]
dummy_head=ListNode(next=head) #虚拟头结点,
cur=dummy_head #交换的两个节点是cur指向的节点后面的
while cur.next!=None and cur.next.next!=None:
temp=cur.next #临时指针,第一次循环,temp存放0节点
temp1= cur.next.next.next #temp1存放2节点
cur.next=cur.next.next #dummy_head后面接1节点(取代原来0节点的位置)
cur.next.next=temp #cur.next就是1节点,此时成为了实际头结点,后面接0节点
temp.next=temp1 #0节点后接2节点,到这完成了0节点和1节点的交换
#更新指针
cur=cur.next.next #后移两位到此时的0节点,在3节点之前
return dummy_head.next