算法基礎~鏈表~排序鏈表的合併(2條)

算法基礎~鏈表~排序鏈表的合併(2條)算法

1,題意:已知兩條已經排序的鏈表頭結點指針l1與l2,將這兩個鏈表進行合併,合併後仍爲有序,返回合併後的頭結點。spa

2,圖解:指針

 

3,思路分析:想象一下就行啦:想象有兩條流水線在工做,流水線上擺放的物體是從小到大擺放的,流水線工做時,取出小物件,code

而後每次取出的小物件進行鏈接,鏈接成了一條線。blog

4,直接上代碼,分析過程如上:排序

public class Solution {
  public:
    ListNode* mergeTwoLists(ListNode* l1, ListNode*2){
        //頭結點,做用是,一條鏈表進行遍歷式添加結點,致使頭指針位置不在第一個結點位置了,
        // 頭結點就起到另一種標誌鏈表的做用啦
       ListNode temp_head(0);
       ListNode *pre = &temp_head;
       while(l1 && l2){
           if(l1->val < l2->val){
               pre->next = l1;
               l1 = l1->next;
           }else{
               pre->next = l2;
               l2 = l2->next;
           }
       }
       //可能取小數致使其中某一條鏈,先取完,還剩下另一條鏈
       if(l1){  //l1 有剩
           pre->next = l1;
       }
       if(l2){
           pre->next = l2;
       }
       return temp_head.next;
  }
}

 

5,ps:頭結點的標誌做用,在鏈表的頭指針要移動時,頭結點的做用就是標誌出一條鏈表的位置來。io

 //頭結點,做用是,一條鏈表進行遍歷式添加結點,致使頭指針位置不在第一個結點位置了, 頭結點就起到另一種標誌鏈表的做用啦
相關文章
相關標籤/搜索