LintCode-合并两个排序链表

该博客主要介绍了如何将两个已排序的链表合并为一个新的有序链表。通过比较链表节点的值,逐步构建新的链表。在遍历过程中,需要处理链表为空或一个链表先遍历完的情况。关键代码展示了具体的实现逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


题目描述:将两个排序链表合并为一个新的排序链表

样例

给出 1->3->8->11->15->null2->null返回 1->2->3->8->11->15->null

做题思路:用两个头结点l1和l2遍历两个链表,比较结点值的大小,小的那个进入新的链表,新链表定义一个头结点,指向的结点放入值以后,挪动到下一个结点,要额外考虑刚开始链表就为空,和遍历中有一个链表提前到达空的情况。

关键代码:ListNode *mergeTwoLists(ListNode *l1,ListNode *l2) {

        // write your code here

     ListNode *head=NULL;

     ListNode *p=head;

     ListNode *p1=l1;

     ListNode *p2=l2;

     if(l1==NULL)  return l2;

     if(l2==NULL) {return l1;}

      while(p1!=NULL&&p2!=NULL)

      { if(p1->val<p2->val)

        { p->next=p1;

          p1=l1->next;

          }

        else { p->next=p2;

              p2=l2->next;}

               p=p->next;

     }

     if(p1==NULL) p->next=p2;

     if(p2==NULL) {p->next=p1;}

      return head;

    }

做题感想:这一题我熬夜一直在改,一直提交的就是越界,不知道是哪里错了,很焦灼,后来把代码给同学看了看,才发现我刚开始定义的新链表的头结点是空是不对的,因为头结点的数据域里有值,但是并不用它,返回时不能返回头结点,因为定义了空。后来改成了赋值一个节点,返回时返回的头结点指向的开始结点。就成功了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值