4,常數時間內刪除單鏈表中某結點

2021-06-09 18:04:32 字數 1186 閱讀 2413

問題:乙個單鏈表,很長,遍歷一遍很慢,我們僅知道乙個指向某節點的指標pnode,而我們又想刪除這個節點。

思路:將該結點的下乙個結點的內容拷貝到當前結點,然後刪除下乙個結點。

如果該結點時最後乙個結點,則必須遍歷一遍單鏈表,找到前面乙個結點,然後刪掉該結點。

注意:雖然最後一種情況是線性複雜度的,但是總體上來看還是常數時間的。

// linktable.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include #include using namespace std;

//鍊錶的結構體

struct node

;//2,找第4個結點

struct node * create( string & str_link )

return phead;

}void out_link( struct node * phead )

cout << endl;

}struct node * find_third_node( struct node * phead )

} //快慢指標一起走

while(pfast)

return pslow;

}struct node * find_last_node( struct node * phead )

return pnode;

}void delete_node( struct node * phead, struct node * pnode )

if( !prenode )

prenode->next = null;

delete pnode;

} else //否則拷貝下乙個元素的內容,並刪除下乙個結點 }

void test()

{ string str;

cin >> str;

struct node *phead = create( str );

cout << "the link is : ";

out_link( phead );

struct node *pnode = find_third_node(phead);

delete_node( phead, pnode );

cout << "delete the last third node:" <

O 1 時間內刪除指定鍊錶結點

題目 給定單鏈表頭指標和乙個結點指標,定義乙個函式在o 1 時間內刪除該結點。分析 對於上圖例項鍊錶 a 刪除指標p有兩種方式 於是,定位到思路2,但是思路2有兩個特例 刪除的是尾指標,需要遍歷找到前乙個指標 整個鍊錶就乙個結點 屬於刪尾指標,但沒法找到前面的指標,需要開小灶單獨處理 大體演算法思路...

O 1 時間內刪除指定鍊錶結點

題目 給定單鏈表頭指標和乙個結點指標,定義乙個函式在o 1 時間內刪除該結點。分析 對於上圖例項鍊錶 a 刪除指標p有兩種方式 於是,定位到思路2,但是思路2有兩個特例 刪除的是尾指標,需要遍歷找到前乙個指標 整個鍊錶就乙個結點 屬於刪尾指標,但沒法找到前面的指標,需要開小灶單獨處理 大體演算法思路...

刪除單鏈表中的重複結點

方法一 遞迴 link delsame link head 沒有重複的元素,加入list後,為了保持不變式 要從list兩兩比較,如果有相同元素必定在開頭兩個 link pointer,temp head if head next null return head head next delsame...