題目:
輸入兩個單調遞增的鏈表,輸出兩個鏈表合成後的鏈表,當然我們需要合成後的鏈表滿足單調不減規則。
我的思路
這個題目還好,寫出來了,但是方法可能是笨法
我的思路是 創建一個新鏈表 然後這兩個鏈表的每個節點進行對比,把小的存放進去,然後下一個節點
直到兩個鏈表都遍歷完成
其中有幾個點要注意一下
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;
}
};