首先是鍊錶的結構
初始化struct listnode
int mval;
listnode * pnext;
};
1.單鏈表的頭插void initlist(listnode *phead)
.2.單鏈表的尾插bool insert_head(listnode* phead,int x)
3.單鏈表的查詢bool insert_tail(listnode* phead,int x)
4.查詢待刪除節點的前驅listnode* search(listnode *phead,int x)
}return
null;
}
listnode* searchprev(listnode *phead,listnode* bedelete)
}return
null;
}
(2) o(1)的時間複雜度刪除void deletenode(listnode *phead,listnode* bedelete)
把待刪除節點的下乙個節點的內容複製到待刪除節點,然後把下乙個節點刪除,相當於把當前要刪除的節點刪除了
這個方法雖然時間複雜度小,但是要考慮的情況很多(3種):刪除的是不是尾節點,這個尾節點會不會是頭節點
6.單鏈表的正序列印void deletelistnode(listnode * phead,listnode *bedelete)
else
if(phead == bedelete)//2.鍊錶只有乙個節點,既是頭節點,也是尾節點
else
//鍊錶中有多個節點,要刪除的是尾節點
p->pnext = bedelete->pnext;//bedelete->pnext其實就是null
delete bedelete;
bedelete =
null;
}}
7.(1)從尾到頭列印鍊錶,用棧void show(listnode *phead)
cout<}
8.鍊錶的逆置void printlistreverse(listnode *phead)//這個沒有返回,直接列印
while(!st.empty())//出棧
cout
<(2)從尾到頭列印鍊錶,用遞迴,缺點是容易導致棧溢位
vector
printlistreverse_digui(listnode *phead)//將_vec返回,在呼叫它的函式中進行列印
_vec.push_back(phead->mval);
return _vec;
}
listnode* reverselist(listnode* phead)//逆置之後沒有改變頭節點,依然可以返回,不返回也可以
return phead;
}
單鏈表 (面試題)
關於單鏈表的基本操作,之前已經總結過了,那些掌握之後算是了解了單鏈表是什麼?不過現在面試的題中,肯定不會只讓你回答單鏈表的基礎操作,總是會改變一些東西,或是擴充套件一下。下面就是一些關於單鏈表的擴充套件內容 include include include pragma warning disable...
單鏈表面試題
1.倒序列印鍊錶 void reverseprint slistnode pfirst 有兩種方法 1.遞迴操作 2.非遞迴操作 2 非遞迴 slistnode pend slistnode pcur pend null while pfirst pend pend pcur printf d pe...
單鏈表(面試題)
鍊錶反轉思路 1.單鏈表中有效節點的個數 2.查詢單鏈表中弟第k個節點 3.單鏈表的反轉 實現 如下 public class testlink 1單鏈表中有效節點的個數 遍歷得出個數 public static intcount heronode head int count 0 while tr...