華為機試題 刪除鍊錶中的重複節點 剩餘節點逆序輸出

2021-07-09 22:14:51 字數 1406 閱讀 3197

描述: 

題目描述:

輸入乙個不帶頭節點的單向鍊錶(鍊錶的節點數小於100),刪除鍊錶中內容重複的節點(重複的節點全部刪除),剩餘的節點逆序倒排。

要求實現函式: 

void vchanprocess(strnode * pstrin,strnode * pstrout);

【輸入】 

pstrin

:輸入乙個不帶頭節點的單向鍊錶

【輸出】 

pstrout

:刪除內容重複的節點(重複的節點全部刪除),剩餘節點逆序輸出(不帶頭節點,鍊錶第乙個節點的記憶體已經申請)。

【注意】只需要完成該函式功能演算法,中間不需要有任何io的輸入輸出

示例 輸入鍊錶的內容依次為 6,7,8,8,9,10,6

則輸出鍊錶的內容依次應該是 10,9,7

#include #include #include #include #include #include "oj.h"

using namespace std;

/*功能: 輸入乙個不帶頭節點的單向鍊錶(鍊錶的節點數小於100),刪除鍊錶中內容重複的節點(重複的節點全部刪除),剩餘的節點逆序倒排。

輸入: pstrin: 輸入乙個不帶頭節點的單向鍊錶

輸出: pstrout:刪除內容重複的節點後,逆序排列的鍊錶(不帶頭節點,鍊錶第乙個節點的記憶體已經申請)。

返回:示例:

輸入鍊錶的內容依次為 6,7,8,8,9,10,6

則輸出鍊錶的內容依次應該是 10,9,7

*/int ichanprocess(strnode * pstrin,strnode * pstrout)

vectorvec;

mapmmap;

strnode *p = pstrin;

int i = 0;

/*把所有的值取出來*/

while (p)

/*把沒有重複的值取出來*/

map::iterator it;

for (it = mmap.begin(); it != mmap.end(); it++) }

if (vec.empty())

/*排序*/

sort(vec.begin(), vec.end());

pstrout->data = vec[vec.size() - 1];

pstrout->pstrnext = null;

strnode *pcurrnode = pstrout;

for (i = vec.size() - 2; i >= 0; i--)

return 0;

}/* 釋放鍊錶 */

void vfreechan(strnode * pstrchan)

return;

}

鍊錶 刪除鍊錶中重複的節點

刪除鍊錶中重複的節點 方法一 採用遞迴的方法,但這種方法在鍊錶無重複節點時效率不高 function deleteduplication phead if phead.val phead.next.val return deleteduplication node 採用遞迴的方法從下乙個不重複的點開...

鍊錶 刪除鍊錶中重複的節點

刪除鍊錶中重複的節點 方法一 採用遞迴的方法,但這種方法在鍊錶無重複節點時效率不高 function deleteduplication phead if phead.val phead.next.val return deleteduplication node 採用遞迴的方法從下乙個不重複的點開...

刪除鍊錶中重複的節點

題目描述 在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。例如,鍊錶1 2 3 3 4 4 5 處理後為 1 2 5 這個題目首先考慮到頭結點也可能是重複的節點,所以需要設定乙個頭結點之前的節點。之後需要3個指標 pre,cur和next struct...