leetcode 24. 两两交换链表中的节点——链表
作者:互联网
【题目】
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
【解题思路】
最重要的一点:建立一个空头
过程:
- 设立一个新的空头,nhead = ListNode(None)
- 将新的空头的下一个节点指向原链表的头结点head,nhead.next = head
- 我假设空头的下一个节点和下下个节点为a和b,则a, b = c.next, c.next.next,利用空头、a和b三个节点来对a和b两个节点进行交互
- 将空头指向空头的下下个节点,重复进行交换,直到为空
图像如下:
【python代码如下】
class Solution:
def swapPairs(self, head: ListNode) -> ListNode:
if head == None or head.next == None:
return head
nhead = ListNode(None)
nhead.next = head
c = nhead
while c.next and c.next.next:
a, b = c.next, c.next.next
c.next = b
a.next = b.next
b.next = a
c = c.next.next
return nhead.next
【复杂度分析】
- 时间复杂度:O(N),其中 N 指的是链表的节点数量。
- 空间复杂度:O(1)。
标签:24,head,leetcode,链表,空头,nhead,next,节点 来源: https://blog.csdn.net/kuangd_1992/article/details/104128121