zoukankan      html  css  js  c++  java
  • 两两交换链表中的节点(Python and C++解法)

    题目:

    给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

    示例:

    给定 1->2->3->4, 你应该返回 2->1->4->3.

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/swap-nodes-in-pairs

    思路:

      指针往后移动时,应当一次移动两个节点。

      每次交换的操作都是重复的,可以考虑使用递归实现。

    Python解法:

     1 class ListNode:
     2     def __init__(self, x):
     3         self.val = x
     4         self.next = None
     5 
     6 class Solution:
     7     def swapPairs(self, head):
     8         if head == None or head.next == None:  # 递归终止条件,当前没有节点或者只有一个节点
     9             return head
    10         firstNode = head
    11         secondNode = head.next
    12         firstNode.next = self.swapPairs(secondNode.next)  # firstNode连接后面交换完成的子链表
    13         secondNode.next = firstNode  # secondNode连接firstNode
    14 
    15         return secondNode  # 返回交换完成的子链表,且secondNode变成了头结点

    C++解法:

     1 struct ListNode {
     2       int val;
     3       ListNode *next;
     4       ListNode(int x) : val(x), next(NULL) {}
     5  };
     6 
     7 class Solution {
     8 public: 
     9     ListNode* swapPairs(ListNode* head) {  // 函数返回的是首节点指针,所以函数类型为指针
    10         if (head == NULL || head -> next == NULL)
    11             return head;
    12         ListNode *firstNode = head;
    13         ListNode *secondNode = head -> next;
    14 
    15         firstNode -> next = swapPairs(secondNode -> next);
    16         secondNode -> next = firstNode;
    17 
    18         return secondNode;
    19     }
    20 };
  • 相关阅读:
    使用母版页后台控制样式
    sql语句小综合
    sql拆分字段区分查询
    sql排名语句
    智力大冲浪(贪心)
    互斥的数(贪心)
    Crazy Search(hash)
    Frequent values(倍增RMQ)
    色板游戏(线段树)
    阶乘质因子分解(唯一分解定理)
  • 原文地址:https://www.cnblogs.com/kongzimengzixiaozhuzi/p/13056678.html
Copyright © 2011-2022 走看看