天天看點

Leetcode:merge_two_sorted_lists

一、     題目

   合并兩個排好序的連結清單,按照節點的大小排列。

二、     分析

   思路很明确,可以分為下面的步驟:

1.     如果其中一個為NULL,則傳回另外一個連結清單即可

2.     判斷兩個連結清單節點的大小,選取小的接入目标連結清單,并同時把連結清單後移

3.     當至少有一個連結清單為NULL時,則判斷是哪一個為空,并将另一個連結清單接入目标連結清單即可

注意:過程中由于初始時将目标連結清單置NULL,導緻WA了好多次,這裡我最後傳回的是next

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) {
    	ListNode *Listtar,*head;
    	//Listtar=NULL;
    	head=Listtar;
    	if(l1==NULL)
    	   return l2;
    	if(l2==NULL)
    	   return l1; 
		     
    	while(l1&&l2){
    		if(l1->val>l2->val){
    			Listtar->next=l2;
    			l2=l2->next;
    			Listtar=Listtar->next;
    		}
    		else {
    			Listtar->next=l1;
    			l1=l1->next;
    			Listtar=Listtar->next;
    		}
    	}
        if(l1)
        	Listtar->next=l1;
        else
        	Listtar->next=l2;
        	
        return head->next;
    }
};