题目描述:将两个排序链表合并为一个新的排序链表
样例
给出 1->3->8->11->15->null
,2->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;
}
做题感想:这一题我熬夜一直在改,一直提交的就是越界,不知道是哪里错了,很焦灼,后来把代码给同学看了看,才发现我刚开始定义的新链表的头结点是空是不对的,因为头结点的数据域里有值,但是并不用它,返回时不能返回头结点,因为定义了空。后来改成了赋值一个节点,返回时返回的头结点指向的开始结点。就成功了。