算法基礎~鏈表~排序鏈表的合併(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
//頭結點,做用是,一條鏈表進行遍歷式添加結點,致使頭指針位置不在第一個結點位置了, 頭結點就起到另一種標誌鏈表的做用啦