Swap Nodes in Pairs 解法
第 12 周题目
难度:Media
LeetCode题号:24
题目
Description:
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.
思考
整体的思想是维持三个指针变量
current, next, pre,分别表示当前位置,下一个位置和上一个位置
每次循环,current指向next的下一个,next指向current,同时pre指向next(原本pre指向current)
剩下的就是处理开头和结尾的
因为存在pre,所以开始的两个节点调换不写在循环里
最后当next为null时退出循环
代码
/**
* 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 * current,* Next, * pre, * result;
current = head;
Next = current->next;
result = Next;
current->next = Next->next;
Next->next = current;
pre = current;
if (current->next != NULL) {
current = current->next;
}
Next = current->next;
while (Next != NULL) {
current->next = Next->next;
Next->next = current;
pre->next = Next;
pre = current;
if (current->next != NULL) {
current = current->next;
}
Next = current->next;
}
return result;
}
};