您的位置:首页 > Web前端 > Node.js

[LeetCode] 24. Swap Nodes in Pairs

2016-07-18 23:58 363 查看
思路:

用三个指针进行操作. 现将两个指针指向当前的节点对, 然后将上一个节点对和当前节点对连接好, 然后交换当前节点对的位置, 最后做一些为下一轮指针处于正常位置的的准备工作. 详细看注释.

ListNode* swapPairs(ListNode* head) {
if (! head || ! head->next) return head;
ListNode* cur = head; // 当前节点, 一般指向节点对的后一个节点
ListNode* prev1 = NULL; // 前节点, 一般指向节点对的前一个节点
ListNode* prev2 = NULL; // 前前节点, 一般指向上一对节点对的后一个节点

while (cur && cur->next) {
// 挪到新的一对节点处
prev1 = cur;
cur = cur->next;
// 更新头结点
if (prev1 == head)
head = cur;
// 将上一对的尾节点和当前头结点连在一起
if (prev2)
prev2->next = cur;

ListNode* pNext = cur->next;
// 交换当前这对节点的顺序
cur->next = prev1;
prev1->next = pNext;

// 前前指针指向当前节点对的尾节点, 为下轮循环连接下一个首节点做准备
prev2 = prev1;
// cur挪到下一对的首节点
cur = pNext;
}

return head;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode 指针 链表