LeetCode:24. Swap Nodes in Pairs

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.

就是交换链表中相邻的两个节点。

思路一:直接交换

很简单,直接交换两个相邻的节点。这里有个技巧,就是给链表加一个虚拟头部作为前置节点方便实现第一个节点的交换功能。交换两个节点之后把指针移到第二个节点,再作为下一次交换的前置节点。

Python 代码实现

# 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.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值