合併兩個排序的鏈表

題目:

輸入兩個單調遞增的鏈表,輸出兩個鏈表合成後的鏈表,當然我們需要合成後的鏈表滿足單調不減規則。

在這裏插入圖片描述

我的思路

這個題目還好,寫出來了,但是方法可能是笨法
我的思路是 創建一個新鏈表 然後這兩個鏈表的每個節點進行對比,把小的存放進去,然後下一個節點
直到兩個鏈表都遍歷完成

其中有幾個點要注意一下
1.如果兩個鏈表長度不等的情況
比如鏈表A 都已經結尾了,那麼直接把鏈表B的數據塞進去就可以了,反之一樣
2.如果A當前節點的值小於B當前節點的值

A 鏈表爲 1 -> 3 ->5
B 鏈表爲 2 -> 4 - >6

A的第一個節點小於B的第一個節點,這時 A = A->next;
B不能動 還是讓這個節點繼續與A的下一個節點做比較,直到遇到比他大的

3.把數據都塞入新鏈表,新鏈表的頭是不能要的

把兩個鏈表的數據都塞入了新鏈表,這時新鏈表的頭是不能要的 我們只要後面的內容
我直接又新建了個鏈表 直接新鏈表 等於鏈表的next 就是沒有頭節點的

看代碼吧
/*
struct ListNode {
	int val;
	struct ListNode *next;
	ListNode(int x) :
			val(x), next(NULL) {
	}
};*/
class Solution {
public:
    ////// 我封裝的在鏈表p尾部追加一個 t//////
    void addNode(ListNode* p,ListNode* t)
    {
       while (p->next != nullptr)
	    {
		    p = p->next;
	    }
	    p->next = t;
    }
    
    ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
    {
        ListNode* p = new ListNode(0);
        
        while (pHead1 != nullptr || pHead2 != nullptr)
	    {

		    ListNode* t = new ListNode(0);

		    /////p1 爲null ///////
		    if (pHead1 == nullptr)
		    {
			    t->val = pHead2->val;
			    pHead2 = pHead2->next;
		    }
		    else if (pHead2 == nullptr)
		    {
			    t->val = pHead1->val;
			    pHead1 = pHead1->next;
		    }
		    if (pHead1 != nullptr && pHead2 != nullptr)
		    {
			    if (pHead1->val > pHead2->val)
			    {
				    t->val = pHead2->val;
				    pHead2 = pHead2->next;
			    }
			    else
			    {
				    t->val = pHead1->val;
				    pHead1 = pHead1->next;
			    }
		    }
		    addNode(p, t);

	}


	    ListNode* newNode = new ListNode(0);

	    newNode = p->next;

        return newNode;
    }
};

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章