對於單鏈表而言,它沒有雙鏈表那麼複雜,它只有頭節點,尾節點,節點資料,後繼指標。在下面本人實現了 單鏈表的 增 刪 插 查 改。
#include#include#include#includetypedef int datatype;
typedef struct slistnode
slistnode;
void pushback(slistnode*&phead, datatype x);
void popback(slistnode *&phead);
void printslist(slistnode *&phead);
void pushfrot(slistnode*&phead,datatype x);
void popfront(slistnode*&phead);
slistnode *find(slistnode*phead, datatype x);
//void insert(slistnode*phead, datatype pos, datatype x);
void insert(slistnode*phead, datatype x);
void erase(slistnode*&phead,slistnode *pos );
void insertnonode(slistnode *pos, datatype x);
slistnode* _buynode(datatype x)
void pushback(slistnode*&phead, datatype x)
else
tail->next = _buynode(x); }}
void popback(slistnode *&phead)
else if (phead->next == null)
else
free(tail);
tem->next = null; }}
void printslist(slistnode *&phead) //列印鍊錶
printf("null\n");
}void pushfrot(slistnode*&phead, datatype x) //頭插
else }
void popfront(slistnode*&phead) //單鏈表頭刪
else if(phead->next == null)
else
}slistnode *find(slistnode*phead, datatype x) //查詢節點
else
else
} printf("沒有查到該資料!\n"); }}
void insert(slistnode*pos, datatype x) 在指定節點 插入資料
void erase(slistnode *&phead,slistnode *pos) //刪除指定位置的節點
slistnode *prv = phead;
while (prv)
prv = prv->next; }
}//刪除乙個無頭單鏈表
void delnonode(slistnode *pos)
//在無頭單鏈表的乙個非頭節點前插入乙個節點
void insertnonode(slistnode *pos, datatype x)
//查詢中間節點
slistnode *findmidnode(slistnode *phead)
return slow;
} //找倒數第k個節點
slistnode *findknode(slistnode *phead, int k)
while (fast->next)
*/ while (fast&&k--)
while (fast)
return slow;
}//從尾到頭列印鍊錶
void printtailtohead(slistnode*phead)}//
slistnode *reverse(slistnode *phead)//單鏈表的逆置
return newhead;
}void test1()
void test2()
void test3()
void test4()
void test5()
void test6()
int main()
以上如果發現有錯的地方或者還有其他建議,希望提出寶貴意見。謝謝!!!
本文出自 「土豆_」 部落格,請務必保留此出處
逆置單鏈表 求倒數第k個結點
定義並建立鍊錶 include using namespace std include typedef struct listnode listnode void push listnode list,int x else cur next tmp 逆置單鏈表 listnode listrevers...
單鏈表的倒數第K個節點
思路 建立兩個迭代器,乙個迭代器quick,乙個迭代器slow,quick沿鍊錶,先行k步,然後和slow一起行進,直至quick到達鍊錶尾端,此時slow對應的資料,就是倒數第k個節點。include include includeusing namespace std listchange ve...
刪除單鏈表倒數第K個節點
有p1,p2兩個指標,p1從頭開始跑,先跑k個節點,然後p2開始跑,當p1跑到頭時,p2指向的就是倒數第k個節點了。這道題的思路比較簡單,要想做得更好,可以加入一些魯棒性的考慮,比如說空鍊錶情況,鍊錶長度小於k等。下面是 include struct node class solution if k...