1. 程式人生 > >LintCode-合併兩個排序連結串列

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

    }

做題感想:這一題我熬夜一直在改,一直提交的就是越界,不知道是哪裡錯了,很焦灼,後來把程式碼給同學看了看,才發現我剛開始定義的新連結串列的頭結點是空是不對的,因為頭結點的資料域裡有值,但是並不用它,返回時不能返回頭結點,因為定義了空。後來改成了賦值一個節點,返回時返回的頭結點指向的開始結點。就成功了。