两两交换链表中的节点(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 };

原文链接: https://www.cnblogs.com/kongzimengzixiaozhuzi/p/13056678.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    两两交换链表中的节点(Python and C++解法)

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/353302

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午7:59
下一篇 2023年3月2日 上午7:59

相关推荐