問題:乙個單鏈表,很長,遍歷一遍很慢,我們僅知道乙個指向某節點的指標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...