将两个排序链表合并为一个新的排序链表.
样例
给出 1->3->8->11->15->null,2->null, 返回 1->2->3->8->11->15->null。
双指针
这个和合并两个排序数组是一样的,两个指针就行了,只是不像vector那样简单赋值就可以了,而是要通过变换指针来连接起来,思路就是新建一个链表,通过双指针每次分离出来一个节点,把这个节点链接到新链表的后面,当一个链表遍历完之后,只需把另外一个链表剩下的整个链接到新链表的后面就行了,写起来也是不难,像链表的这种遍历和拆解都应该形成自己的一套固定的写法,会简单许多。
ListNode * mergeTwoLists(ListNode * l1, ListNode * l2) {
if(!l1)
return l2;
if(!l2)
return l1;
ListNode *newhead=new ListNode(0);
ListNode *newhead_back;
ListNode *head1=l1;
ListNode *head2=l2;
ListNode *tmp1;
ListNode *tmp2;
while((head1!=NULL)&&(head2!=NULL)) //两个都不空,才进while循环
{
tmp1=head1;
tmp2=head2;
//tmp1->next=NULL;
//tmp2->next=NULL;
if(tmp1->val<tmp2->val)
{
head1=head1->next;
tmp1->next=NULL;
if(!newhead->next)
{
newhead->next=tmp1;
newhead_back=newhead->next;
}
else
{
newhead_back->next=tmp1;
newhead_back=newhead_back->next;
}
}
else
{
head2=head2->next;
tmp2->next=NULL;
if(!newhead->next)
{
newhead->next=tmp2;
newhead_back=newhead->next;
}
else
{
newhead_back->next=tmp2;
newhead_back=newhead_back->next;
}
}
}
if(head1) //如果head1不空,把其连接到后面
{
newhead_back->next=head1;
return newhead->next;
}
if(head2) //如果head2不空,把其连接到后面
{
newhead_back->next=head2;
return newhead->next;
}
return newhead->next;
// write your code here
}
网友评论