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;//返回新链表的头指针!!!
}
};