两两交换链表中的节点(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 };
posted @ 2020-06-06 21:59  孔子?孟子?小柱子!  阅读(340)  评论(0编辑  收藏  举报