LeetCode 24. 两两交换链表中的节点(Swap Nodes in Pairs)

题目描述

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

示例:

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

说明:

  • 你的算法只能使用常数的额外空间。
  • 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

解题思路

利用递归的思想,依次交换链表中的节点对。具体对于每个节点来说:

  • 若该节点为NULL,则直接返回NULL
  • 若该节点的下一个节点为NULL,则直接返回该节点
  • 交换该节点与下一个节点,利用辅助指针记录该节点的下一个节点,并递归的交换接下来的节点对

代码

 1 /**
 2  * Definition for singly-linked list.
 3  * struct ListNode {
 4  *     int val;
 5  *     ListNode *next;
 6  *     ListNode(int x) : val(x), next(NULL) {}
 7  * };
 8  */
 9 class Solution {
10 public:
11     ListNode* swapPairs(ListNode* head) {
12         if(!head) return NULL;
13         if(!head->next) return head;
14         ListNode* temp=head->next;
15         head->next=swapPairs(temp->next);
16         temp->next=head;
17         return temp;
18     }
19 };

猜你喜欢

转载自www.cnblogs.com/wmx24/p/9084952.html