給定一個鏈表,調換每兩個相鄰節點,並返回其頭部。
例如,
給定 1->2->3->4, 你應該返回的鏈表是 2->1->4->3。
你的算法必須使用唯一不變的空間。
你也不能修改列表中的值,只有節點本身是可以改變的。
Give 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.
我們就以題目中給出的1,2,3,4作為示例,將其作為兩部分
1,2 -- 3,4
或者我畫個圖出來更加直觀吧……
/**
* Definition for singly-linked list.
* 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* temp = head->next;
head->next = swapPairs(temp->next);
temp->next = head;
return temp;
}
};