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;
        }
    };



    每天早上叫醒你的不是闹钟,而是心中的梦~
  • 相关阅读:
    齐文词根词缀---3.25、cod/code-密码
    齐文词根词缀---3.24、oper操作
    Netty SSL双向验证
    带宽计算-大B和小B的区别
    Http2服务调用排坑记
    How to Use cURL HTTP/2 on macOS
    谈谈 HTTP/2 的协议协商机制
    springboot搭建http2服务器和h2c服务器 h2 的http/https 请求服务器
    Netty系列之Netty安全性
    转载 Netty tls验证
  • 原文地址:https://www.cnblogs.com/vintion/p/4117001.html
Copyright © 2011-2022 走看看