题目内容:
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.
思路:
每两个摘下来,交换位置,连接起来,再往下处理。
代码:
/**
* 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 || head->next == NULL)
return head;
ListNode *last(NULL), *first(head), *second(head->next);
head = second;
while (second != NULL) {
if (last != NULL)
last->next = second;
//swap(&first, &second, &last);
first->next = (second)->next;
(second)->next = first;
last = first;
if (last != NULL){
first = first->next;
if (first != NULL)
second = first->next;
else
second = NULL;
}
else {
first = NULL;
second = NULL;
}
}
return head;
}
};