LeetCode24 两两交换链表中的节点

LeetCode第24题

问题描述

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
示例:

1
给定 1->2->3->4, 你应该返回 2->1->4->3.

说明:

  • 你的算法只能使用常数的额外空间。
  • 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

解题思路

假设有P->A->B->C->…链表,交换A、B节点即把A.next指向C,B.next指向A,P.next指向B。算法步骤如下图:

在实现时,可以在头部添加一个空结点。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 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
"""

# 插入一个空的节点,指向head
p = ListNode(0)
p.next = head
head = p
while p.next and p.next.next:
temp = p.next.next
p.next.next = p.next.next.next
temp.next = p.next
p.next = temp
p = p.next.next

return head.next
感谢你对我的支持,让我继续努力分享有用的技术和知识点