連線兩個排序的單鏈表

2022-09-02 05:06:05 字數 1601 閱讀 5996

牛客中的**是這樣的:

struct listnode 

}; 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;

}

vs中的**是這樣的:

#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,比較兩個指標指向的節點值大小,較小的鏈結到新鍊錶的尾部,且指標往後移動乙個,較大的...