leetcode 题解 || Merge Two Sorted Lists 问题

problem:

Merge two sorted linked lists and return it as a new list. The new list should be made by
 splicing together the nodes of the first two lists.

将两个已序链表合并,新链表需要拆分组合原来链表的结点,言外之意,不需要新建结点。


thinking:

(1)突破点在于找到新建链表的第一个结点,找到第一个结点,也就找到了新链表的头指针!!!!

(2)找到了了第一个结点,那么就可以将l1 、l2比较插入到新链表的尾部了

(3)最后将剩下的l1 或者l2结点插入到新链表尾部。


code:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) {
        ListNode *f=l1;//指向l1
        ListNode *s=l2; //指向l2
        ListNode *n=NULL;//标记新链表
        if(l1==NULL)
            return l2;
        if(l2==NULL)
            return  l1;
        
        if(l1->val<l2->val)//先找到新链表第一个结点
        {
            n=l1;
            f=l1->next;
        }
        else
        {
            n=l2;
            s=l2->next;
        }
        ListNode *newlist=n;//头指针找到了
        while((f!=NULL)&&(s!=NULL))//按照数值大小在新链表后端插入
        {
            if(f->val<s->val)
            {
                n->next=f;
                f=f->next;
                n=n->next;
            }
            else
            {
                n->next=s;
                s=s->next;
                n=n->next;
            }
        }//while
        
        while(f!=NULL)//将l1剩下的结点插入到新链表的尾部
        {
            n->next=f;
            f=f->next;
            n=n->next;
        }
        while(s!=NULL)// 将l2剩下的结点插入到新链表的尾部
        {
            n->next=s;
            s=s->next;
            n=n->next;
        }
        return newlist;//返回新链表的头指针!!!
    }
};


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值