/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
if(!pHead1)
return pHead2;
if(!pHead2)
return pHead1;
ListNode *Head = pHead1; //利用第一個鏈表的頭指標指向合并后的新鏈表的頭結點
ListNode *p1 = pHead1->next;
ListNode *p2 = pHead2->next; //p1,p2分別指向連個鏈表的第一個節點
ListNode *p = Head;
while(p1 && p2){
if(p1->val <= p2->val){
p->next = p1;
p = p1;
p1 = p1->next;
}else{
p->next = p2;
p = p2;
p2 = p2->next;
}//else
}//while
p->next = p1 ? p1 : p2;
return Head;
}
};
uj5u.com熱心網友回復:
輸入為兩條鏈條,輸出為合并后的鏈表,但是不想為輸出分配任何空間。在鏈表總數量不變的情況下,兩條鏈表的資料均可能被被修改,此時如果鎖定鏈表1為輸出值,可能需要交換鏈表頭。
ListNode *Head = pHead1; //利用第一個鏈表的頭指標指向合并后的新鏈表的頭結點,這樣定義不是很好。
if(p1->val <= p2->val) //因為要回傳pHead1,所以不得不交換。如果可以回傳pHead2,可以不交換。
std::swap(*pHead1,*pHead2);
ListNode *p1 = pHead1->next;
ListNode *p2 = pHead2; //這不是這一個節點,是第二個節點呀。。
ListNode *p = Head;
后面不用動吧....
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/64505.html
上一篇:IEC60870-5-104協議
下一篇:基于tcp的簡單檔案傳輸程式
