單向鍊錶中的一些演算法

2021-08-31 04:50:09 字數 734 閱讀 8977

1. 在乙個單向鍊錶中,尋找鍊錶中間節點。

使用兩個指標,快指標每次步進為2,慢指標每次步進為1。當快指標到達鍊錶尾部時,慢指標指向的就是鍊錶的中間。

node findmiddlenode(node head) 

return p1;

}

2. 在單向鍊錶中尋找倒數第n個元素

思路同1,使用兩個指標,它們之間保持n的距離,當第乙個指標到達鍊錶尾部時,第二個指標指向的就是鍊錶的倒數第n個元素。

node findlastnnode(node head, int n)  

if (i != n)

return null; // 鍊錶長度小於n

while (p1 != null)

return p2;

}

3. 判定鍊錶中是否存在環

思路同1,使用兩個指標,p1每次步進為2,p2每次步進為1,迴圈直到p2等於null或者兩個指標相等。若p2==null,說明該鍊錶不存在環;若p1==p2,說明存在環。

bool isloop(node head) 

if (p1 == p2)

return true;

else

return false;

}

單向鍊錶的一些操作

writed by caolichen include include 定義單鏈表節點型別 typedef struct lnode slink 初始化線性表,即將表頭結點的表頭指標指向為空 null slink initlink slink head 建立線性表,輸入n個int型變數 void c...

自己寫的一些單向鍊錶操作

typedef struct singlist singnnode,psingnnode typedef struct looplist loopnode,ploopnode 單向還需修改哈,搜尋的時候是返回前乙個位置還是當前位置 void csingnlist inestmylist psingn...

鍊錶中的一些演算法,Java實現

public class listnode public int getdata public void setdata int data public listnode getnext public void setnext listnode next 鍊錶的遍歷操作 int listlength...