题目描述:
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.
解题思路:每次处理原始链表中剩余结点的前两个结点直到原始链表的结尾,如果原始链表中剩余结点的数目只有一个,直接把该结点加入到结果链表的尾部即可。
AC代码如下:
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
ListNode* final_head = NULL;
ListNode* final_tail = NULL;
ListNode* tmp1 = NULL;
ListNode* tmp2 = NULL;
if (head == NULL || head->next == NULL)
return head;
while (head){
if (final_head == NULL){
tmp1 = head;
tmp2 = head->next;
head = head->next->next;
tmp1->next = NULL;
tmp2->next = NULL;
final_head = tmp2;
final_head->next = tmp1;
final_tail = tmp1;
}
else{
if (head->next == NULL){
final_tail->next = head;
return final_head;
}
else{
tmp1 = head;
tmp2 = head->next;
head = head->next->next;
tmp1->next = NULL;
tmp2->next = NULL;
final_tail->next = tmp2;
final_tail = final_tail->next;
final_tail->next = tmp1;
final_tail = final_tail->next;
}
}
}
return final_head;
}
};