美文网首页程序员
24. Swap Nodes in Pairs

24. Swap Nodes in Pairs

作者: Nautilus1 | 来源:发表于2017-11-12 14:54 被阅读0次

    题目描述:给链表,交换每相邻的两个元素。如:

    Given 1->2->3->4, you should return the list as 2->1->4->3.

    要求空间复杂度为O(1),不能修改结点的值,只能改结点本身。

    分析:设立三个连续指针,后两个指向待交换交换结点,前一个用于保持前部分的连接。画图分析即可弄清指针处理次序。时间复杂度O(n),空间O(1)。

    代码

    /**
     * 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 == nullptr ||head->next == nullptr)
                return head;
            ListNode l(-1);
            l.next = head;
            for (ListNode *pre = &l, *cur = pre->next, *nx = cur->next; 
                 nx; 
                 pre = cur, cur = cur->next, nx = cur? cur->next : nullptr)      //三个指针重新回到相对次序,保证每次循环前情况一致
            {          //交换处理
                pre->next = nx;
                cur->next = nx->next;
                nx->next = cur;
            }
            return l.next;
        }
    };
    

    相关文章

      网友评论

        本文标题:24. Swap Nodes in Pairs

        本文链接:https://www.haomeiwen.com/subject/rjnnmxtx.html