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



    每天早上叫醒你的不是闹钟,而是心中的梦~
  • 相关阅读:
    SpringIoC和SpringMVC的快速入门
    Swoole引擎原理的快速入门干货
    Windowns 10打开此电脑缓慢问题的一种解决办法
    CentOS下使用Postfix + Dovecot + Dnsmasq搭建极简局域网邮件系统
    CentOS7.2 创建本地YUM源和局域网YUM源
    CentOS 7.2 安装配置Samba服务器
    Zookeeper 日志输出到指定文件夹
    MySQL索引优化-from 高性能MYSQL
    Transaction事务注解和DynamicDataSource动态数据源切换问题解决
    Redis使用经验之谈
  • 原文地址:https://www.cnblogs.com/vintion/p/4117001.html
Copyright © 2011-2022 走看看