zoukankan      html  css  js  c++  java
  • Swap Nodes in Pairs

    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.

    这里贴一个错误代码,本人的:

    /**
     * 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) {
            // IMPORTANT: Please reset any member data you declared, as
            // the same Solution instance will be reused for each test case.
            if(head|| head->next)
                return head;
            ListNode *p, *q, *swap;
            p = head;
            q = p->next;
            swap = q;
            while(p&&q)
            {
                p->next = q->next;
                q->next = p;
                p       = p->next;
                q       = p->next;
            }
            return swap;
        }
    };

    Submission Result: Runtime Error

    Last executed input:{1,2}

    原因:

    q = p->next; //此时p=NULL了

    于是添加 if(p)于前

    又错误:

    Submission Result: Runtime Error

    Last executed input:{}

    还是那个原因

    if(head||head->next)

    head=NULL时, head->next就错了

    改之:

    if(!head||!head->next) return head;


    当一切就绪时,

    /**
     * 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) {
            // IMPORTANT: Please reset any member data you declared, as
            // the same Solution instance will be reused for each test case.
            if(!head||!head->next)
                return head;
            ListNode *p, *q, *swap;
            p = head;
            q = p->next;
            swap = q;
            while(p&&q)
            {
                p->next = q->next;
                q->next = p;
                p       = p->next;
                if(!p)
                    break;
                else
                    q   = p->next;
            }
           return swap;
        }
    };

    Input:{1,2,3,4}Output:{2,1,3}Expected:{2,1,4,3}

    这个错误是, 到后面, 前断开的没连上


    增加前面的pre

    最终代码:

    /**
     * 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) {
            // IMPORTANT: Please reset any member data you declared, as
            // the same Solution instance will be reused for each test case.
            if(!head||!head->next)
                return head;
            ListNode *p, *q, *swap, *pre;
            p = head;
            q = p->next;
            swap = q;
            pre  = NULL;
            while(p&&q)
            {
                p->next = q->next;
                q->next = p;
                if(pre)
                    pre->next = q;
                pre     = p;
                p       = p->next;
                if(!p)
                    break;
                else
                    q   = p->next;
            }
           return swap;
        }
    };



    每天早上叫醒你的不是闹钟,而是心中的梦~
  • 相关阅读:
    Java基础-学习笔记(十)——内部类(嵌套类)
    Java基础-学习笔记(九)——static关键字
    Java基础-学习笔记(八)——函数的参数传递
    JS获取当前时间转成时间戳,并比较两个时间戳得出相差的天数
    tp6的with关联使用(删查),insertAll批量增加
    Vue父子组件的相互调用方法与参数
    Vue父子组件之间的通信
    Vue组价的基本使用
    PHP接入图片文字识别AIP
    EC6模块化的导入和导出
  • 原文地址:https://www.cnblogs.com/vintion/p/4117001.html
Copyright © 2011-2022 走看看