单链表中如何快速删除p指向的节点?( 简单方法:复杂度为O(1) )
問題:
只知道指針P指向一個單向非循環鏈表的節點,不是頭節點也不是尾節點,從鏈表上把 P指向的節點刪除…
思路:
一般的思路是要遍歷鏈表找到節點P的前驅節點, 然后再刪掉節點P, 但是這樣效率不是很高, 可以換個思路, P節點的后繼節點是可以在O(1) 復雜度下得到的, 可以將P的后繼節點的數據復制到P節點中, 然后刪掉P的后繼節點, 重新接鏈即可…
實現如下:
temp = p->next;
p->data = p->next->data;
p->next = p->next->next;
delete temp;
或者:
temp=p->next;
p->data=temp->data;
p->next=temp->next;
delete temp;
這樣就通過復制后面一個節點元素的值和next,然后刪除后一個節點的方法,把當前p指向的節點間接地快速刪除了
參考的原文連接:
http://blog.csdn.net/cnnumen/article/details/5804438
附加:要在鏈表中插入節點時,思路很簡單,只需要考慮兩個問題
1.要插入的節點的next值是什么?
2.要插入的節點的前一個節點是誰?也就是,把哪個節點的next值設置為指向當前待插入節點的指針?
考慮好這兩個問題,就能把要插入的節點鏈接到原來的鏈表中去了。要注意,一般是先要考慮,先處理待插入節點的next值,否則,可能就會導致它的next值對應的節點的指針找不到了。也就是考慮和處理順序是先后再前。
總結
以上是生活随笔為你收集整理的单链表中如何快速删除p指向的节点?( 简单方法:复杂度为O(1) )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言怎么保留n位小数并且四舍五入(附带
- 下一篇: OpenGL画圆