LintCode-合并两个排序链表


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

样例

给出 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->valval)

        { 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;

    }

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

你可能感兴趣的:(链表)