原题
Given a linked list, swap every two adjacent nodes and return its head.
Example:
Given 1->2->3->4, you should return the list as 2->1->4->3.
Note:
Your algorithm should use only constant extra space.
You may not modify the values in the list’s nodes, only nodes itself may be changed.
解法
迭代法. 构造一个虚拟节点dummy指向head, 然后每两个节点一组, 交换节点, 并将p指向交换后的节点, 最后更新p和head.
Time: O(n/2)
Space: O(1)
代码
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def swapPairs(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
dummy = p = ListNode(0)
dummy.next = head
while head and head.next:
# swap nodes
temp = head.next
head.next = temp.next
temp.next = head
p.next = temp
# update pointers
head = head.next
p = temp.next
return dummy.next
本文介绍了一种在链表中交换每两个相邻节点的算法,通过迭代法实现,使用虚拟节点简化操作,确保只使用常数额外空间。该算法适用于需要调整链表顺序而不改变节点值的场景。

被折叠的 条评论
为什么被折叠?



