题目:
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.
解读:交还给定链表中相邻的两个节点,不得修改节点的值。
注意点:left为左节点,right为右节点,temp为左节点的前一个节点(如果有的话)。left指向right的下一个节点,right指向left,temp(若有)指向right。
temp = left, left = left->next; right = left->next,
当只剩下一个节点或者没有节点的时候结束。
代码:
/**
* 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 head;
if(head->next == NULL) return head;
ListNode* left = head;
ListNode* right = left->next;
ListNode* temp;
ListNode* answer = head;
int flag = 0;
while(right != NULL) {
left->next = right->next;
right->next = left;
if(flag == 0) {
answer = right;
temp = left;
flag = 1;
} else {
temp->next = right;
temp = left;
}
if(left->next == NULL) break;
if((left->next)->next != NULL){
left = left->next;
right = left->next;
} else break;
}
return answer;
}
};