牛客中的**是這樣的:
struct listnodevs中的**是這樣的:}; listnode* merge(listnode* phead1, listnode* phead2)
if (phead1 == null || phead2 == null)
listnode* pphead1 = phead1;
listnode* pphead2 = phead2;
listnode* newhead = new listnode(0);
listnode* cur = newhead;
while (pphead1 && pphead2)
else
cur = cur->next;
} if (pphead1 == null)
if (pphead2 == null)
return newhead->next;
}
#pragma once#include#includeusing namespace std;
typedef int datatype;
//結構體 鍊錶
typedef struct listnode
listnode;
//初始化鍊錶
void initlist(listnode** phead)
//插入節點//尾插法
void insert(listnode*& phead, datatype x)
else
pos->data = x;
tial->next = pos;
pos->next = null; }}
//遍歷單鏈表
void printlist(listnode* phead)
cout << "null" << endl;
}//翻轉單鏈表
listnode* revers(listnode* phead)
return newhead;
}//合併兩個單鏈表
listnode* merge(listnode*& phead1, listnode*& phead2)
if (phead1 == null || phead2 == null)
listnode* pphead1 = phead1;
listnode* pphead2 = phead2;
listnode* newhead = new listnode[sizeof(listnode)];
listnode* cur = newhead;
while (pphead1 && pphead2)
else
cur = cur->next;
} if (pphead1 == null)
if (pphead2 == null)
return newhead->next;
}
兩個唯一的不同是在那個新鍊錶的表頭,重新申請的空間,牛客中的初始化一定要看結構體中是如何說的,很明顯,按牛客給出的結構體中,對於節點的初始化時需要顯式呼叫建構函式,而vs中的是人為初始化,這就是,用這種方法,牛客編譯不通過的唯一原因
合併兩個排序的單鏈表
題目 輸入兩個遞增排序的鍊錶,合併這兩個鍊錶並使新鍊錶中的節點仍然是依照遞增排序的。分析 合併單鏈表,須要找到頭結點,對照兩個煉表頭結點後,確定頭結點,再確定頭結點下乙個結點,迴圈遞迴的如前面一樣操作確定每乙個結點位置,同一時候考慮邊界條件,假設兩個鍊錶為空。則肯定無需合併了,就是空鍊錶,假設乙個鍊...
刷演算法 合併兩個排序的單鏈表
輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。首先考慮兩個鍊錶的頭部哪個成為新鍊錶的頭,顯然是值小的那個是新的頭 然後是合併時,兩個鍊錶上分別有乙個指標cur1和cur2,比較兩個指標指向的節點值大小,較小的鏈結到新鍊錶的尾部,且指標往後移動乙個,較大的...
刷演算法 合併兩個排序的單鏈表
輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。首先考慮兩個鍊錶的頭部哪個成為新鍊錶的頭,顯然是值小的那個是新的頭 然後是合併時,兩個鍊錶上分別有乙個指標cur1和cur2,比較兩個指標指向的節點值大小,較小的鏈結到新鍊錶的尾部,且指標往後移動乙個,較大的...