Merge Two Sorted Lists - Leetcode

来源:互联网 发布:软件测试面试题 编辑:程序博客网 时间:2024/05/29 12:51

题意:合并两个有序链表。
思路:此题难易程度是easy,在数据结构书中讲链表这一块有这个题目出现。做法很简单,分别用指针指向两个链表,比较指针所指的值大小,将值小的那一项放入新链表中,并将该指针向后移动一位。
笔者第一次提交的代码如下。这段代码是有问题的,他用r指针确实按从小到大的顺序遍历的两个链表的元素,head也确实是所谓新链表的头指针的内容。但这里最大的问题是并没有生成完整的链表!head的next指针是NULL,r也只是按从小到大顺序,依次是当前的节点(val,NULL)。但是并没有将每个节点串连起来!这是一个严重的问题。然而这个错误出现之后,笔者并没有弄清状况,仍然不知道代码哪里的错误导致了这样的结果。可见笔者对指针这一块内容理解的过于肤浅了。随后在网上看了一下其他人按照这种做法编写的代码,比照了,然后找出来问题出在哪里。

ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {     ListNode* head=NULL;    ListNode* r=NULL;    if (l1 == NULL&&l2 == NULL) return NULL;    if (l1 != NULL&&l2 == NULL) return l1;    if (l1 == NULL&&l2 != NULL) return l2;    if (l1->val<l2->val) {        head=new ListNode(l1->val);        l1 = l1->next;    }    else {        head = new ListNode(l2->val);        l2 = l2->next;    }    //错误。应该是r=head;    head= r;    while (l1 != NULL&&l2 != NULL) {        if (l1->val<l2->val) {        //错误。如果这里重新new一个结点的话,那么r就指向了一个新地址        //因此这样就不能形成一个完整的链表了。            r = new ListNode(l1->val);            l1 = l1->next;            r = r->next;        }        else {            r = new ListNode(l2->val);            l2 = l2->next;            r = r->next;        }    }    if (l1 != NULL&&l2 == NULL)    {        r = l1;    }    else if (l1 == NULL&&l2 != NULL)    {        r = l2;    }    return head;    }

修改之后的代码如下。这样就AC了。

 ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {    ListNode* head=NULL;    ListNode* r=NULL;    if (l1 == NULL&&l2 == NULL) return NULL;    if (l1 != NULL&&l2 == NULL) return l1;    if (l1 == NULL&&l2 != NULL) return l2;    if (l1->val<l2->val) {        head=new ListNode(l1->val);        l1 = l1->next;    }    else {        head = new ListNode(l2->val);        l2 = l2->next;    }    r = head;    while (l1 != NULL&&l2 != NULL) {        if (l1->val<l2->val) {            r->next = l1;            l1 = l1->next;            r = r->next;        }        else {            r->next = l2;            l2 = l2->next;            r = r->next;        }    }    if (l2 == NULL)    {        r->next=l1;    }    else if (l1 == NULL)    {        r->next=l2;    }    return head;    }
1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 怀孕初期感染了动物病毒怎么办? 金龙和银龙打架怎么办 海水缸盐度高了怎么办 洗空调洗坏了怎么办 老师是条青花鱼怎么办 吃了带鱼和南瓜怎么办 苹果平板ad忘了怎么办 小米6进海水了怎么办 小米手机掉海水里怎么办 苹果7进海水了怎么办 7p手机进海水怎么办 育海参苗出现红细菌怎么办 苹果手机掉进厕所怎么办 2个月的婴儿肺炎怎么办 甜甜圈珊瑚脱骨怎么办 宝宝吃了生物球怎么办 狗尾巴被剪掉了怎么办 魟鱼尾巴刺了怎么办 狗咬过了24小时怎么办 狗咬超过24小时怎么办 狗咬超过48小时怎么办 狗咬超过72小时怎么办 狗抓超过24小时怎么办 龙须树叶子发黄怎么办? 车被广告牌砸了怎么办 开花店压力好大怎么办 快成熟葡萄软果怎么办 木本叶长白斑点了怎么办 天猫卖家超过72小时未发货怎么办 淘宝超过72小时不发货怎么办 鸿运当头干叶了怎么办 百合枝干长歪了怎么办 植物主干长歪了怎么办 钱兜子花叶子黄怎么办 丝瓜有苦味吃了怎么办 吃了苦的西葫芦怎么办 吃了苦的西葫芦中毒怎么办 吃了一点苦丝瓜怎么办 丝瓜苦味我吃了怎么办? 小孩牙地包天怎么办 小孩的牙地包天怎么办