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