Leetcode 24. Swap Nodes in Pairs(python+cpp)

Leetcode 24. Swap Nodes in Pairs

题目

在这里插入图片描述

解法:iterative或recursion

链表最基础的操作,必须要会的
首先讲iterative的步骤:

  • 定义一个dummy node储存指向链表头部的指针,用来最后返回结果
  • 定义一个prev_node,参与交换过程,保存指向下一组交换的两个节点中交换后的第一个节点指针,这样才能track整条列表
  • 取出当前需要交换的两个节点,建议重新命名,这样就不会导致交换的时候很多next搞混
  • 进行交换,先断开第一个节点指向第二个节点的指针,将这个指针指向第二个节点的下一个节点;然后将第二个节点的指针指向第一个节点。必须以这个顺序交换,否则会丢失后面的节点
  • 重新初始化prev_node和head,以准备下一次交换,prev_node总是指向head的
    python:
class Solution:
    def swapPairs(self, head: ListNode) -> ListNode:
        #定义dummy node指向头节点
        dummy = ListNode(-1)
        dummy.next = head
        
        #定义prev node来保存交换时需要的临时节点
        prev_node = dummy
        while head and head.next:
            
            #需要交换的节点
            first_node = head
            second_node = head.next
            
            #交换
            prev_node.next = second_node
            first_node.next = second_node.next
            second_node.next = first_node
            
            #调整head位置
            prev_node = first_node
            head = first_node.next
        return dummy.next

Recursive解法相对来说更巧妙也更简洁,同样分成取出需交换节点进行重命名,然后进行交换操作。
C++

class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
        //如果只剩一个节点或者没有节点无需进行交换
        if (!head || !head->next) return head;
        
        //需要交换的节点
        ListNode *first_node = head;
        ListNode *second_node = head->next;
        
        //进行交换
        first_node->next = swapPairs(second_node->next);
        second_node->next = first_node;
        
        //现在second节点是头节点
        return second_node;
    }
};

参考链接:https://leetcode.com/problems/swap-nodes-in-pairs/solution/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值