Swap Nodes in Pairs 解法

来源:互联网 发布:重庆时时彩报号软件 编辑:程序博客网 时间:2024/05/22 17:32

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;    }};
原创粉丝点击