Leetcode 24 两两交换链表中的节点【链表】
本题是比较基础的链表题。链表题的典型套路。
1.思路
1)双指针
2)链表节点交换
解题步骤
1)边界情况——只有少于2个元素
2)定义p,q两个指针
开始循环:
3)交换
改变p.next,q.next(此时p,q不变)
p.next指向q,完成交换
4)进行下一循环的初始化
p是下一次要交换的两个节点的前一个节点
q是下一次要交换的两个节点中的第一个节点
2.代码
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def swapPairs(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if head == None or head.next == None:
return head
else:
start = ListNode(0)
start.next = head
p = start
q = start.next
while q != None and q.next != None:
p.next = q.next
q.next = q.next.next
p.next.next = q
p = q
q = q.next
return start.next