剣指offerは2つの並べ替えのチェーン時計を合併します
1833 ワード
タイトルの説明
2つの単調に増加したチェーンテーブルを入力し、2つのチェーンテーブルの合成後のチェーンテーブルを出力します.もちろん、合成後のチェーンテーブルは単調で減少しない規則を満たす必要があります.
構想は、p,qの2つのノードポインタを宣言し、それぞれ2つのチェーンテーブルの現在のノードを指す. はnewHeadを宣言し、新しいチェーンテーブルのヘッダポインタ、newPnowは新しいチェーンテーブルの現在のノードを指す. p qの2つのノードが指す値は互いに比較され、新しいチェーンテーブルの現在のノードはそれが比較的小さいものを指し、その後は互いに前方に移動する. チェーンテーブルが空の場合、新しいチェーンテーブルの現在のノードのnextポインタを別のチェーンテーブルに直接指し、後ろ自体が接続されています.
コード#コード#
2つの単調に増加したチェーンテーブルを入力し、2つのチェーンテーブルの合成後のチェーンテーブルを出力します.もちろん、合成後のチェーンテーブルは単調で減少しない規則を満たす必要があります.
構想
コード#コード#
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
ListNode* p, *q, *newHead = NULL, *newPNow;
p = pHead1;
q = pHead2;
if(pHead1 == NULL)
return pHead2;
else if(pHead2 == NULL)
return pHead1;
while(p != NULL && q != NULL)
{
if(p->val >= q->val)
{
if(newHead == NULL)
{
newHead = q;
newPNow = q;
q = q->next;
}
else
{
newPNow->next = q;
newPNow = q;
q = q->next;
}
}
else
{
if(newHead == NULL)
{
newHead = p;
newPNow = p;
p = p->next;
}
else
{
newPNow->next = p;
newPNow = p;
p = p->next;
}
}
}
if(p == NULL)
{
newPNow->next = q;
}
else if(q == NULL)
{
newPNow->next = p;
}
return newHead;
}
};