题目:
Given a linked list, swap every two adjacent nodes and return its head.
For example,
Given 1->2->3->4
, you should return the list as 2->1->4->3
.
Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.
思路:
这题比较简单,只需要一个递归就可以解决。
时间复杂度:O(n)
#include<iostream>
#include <string>
#include <stack>
#include <vector>
using namespace std;
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
if (head == NULL) return NULL;
if (head->next == NULL) return head;
ListNode *p = head->next;
head->next = swapPairs(p->next);
p->next = head;
return p;
}
};
int main()
{
Solution s;
ListNode *a1 = new ListNode(1);
ListNode *a2 = new ListNode(2);
ListNode *a3 = new ListNode(3);
ListNode *a4 = new ListNode(4);
a1->next = a2;
a2->next = a3;
a3->next = a4;
ListNode *result = s.swapPairs(a1);
while (result != NULL)
{
cout << result->val << " ";
result = result->next;
}
cout << endl;
return 0;
}