LeetCode:24. Swap Nodes in Pairs
Given a linked list, swap every two adjacent nodes and return its head.
You may not modify the values in the list's nodes, only nodes itself may be changed.
Example:
Given 1->2->3->4, you should return the list as 2->1->4->3.
就是交换链表中相邻的两个节点。
思路一:直接交换
很简单,直接交换两个相邻的节点。这里有个技巧,就是给链表加一个虚拟头部作为前置节点方便实现第一个节点的交换功能。交换两个节点之后把指针移到第二个节点,再作为下一次交换的前置节点。
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def swapPairs(self, head: ListNode) -> ListNode:
nh=ListNode(0)
nh.next=head
pre=nh
while pre is not None:
if pre.next is not None and pre.next.next is not None:
a=pre.next
b=a.next
pre.next=b
a.next=b.next
b.next=a
pre=a
else:
pre=None
return nh.next
思路二:拆开链表
可以先遍历一次原始链表,依次将节点加入到两个不同的新链表中。然后再分别从第二个链表和第一个链表取出结点重新构建一个新链表。示意图如下:
L : 1->2->3->4
L1 : 1->3
L2 : 2->4
NL : 2->1->4->3
THE END.