實現鍊錶及相關的方法 1

2021-10-09 18:26:39 字數 3174 閱讀 1025

本篇部落格主要是自己實現一下鍊錶。

//節點類

class

listnode

}

該鍊錶為不帶頭結點的單鏈表,並且裡邊有很多鍊錶基本操作的例項方法,下面一一介紹。

public

class

mysignallist

}

public

void

addfirst

(int data)

else

}

//尾插法(也要分是否為第一次插入)

public

void

addlast

(int data)

else

cur.next = node;

}}

public

intgetlength()

return count;

}

public

boolean

addindex

(int index,

int data)

//如果在0號下標插,即第乙個位置,直接呼叫頭插法的方法

if(index ==0)

int count =0;

listnode cur =

this

.head;

listnode node =

newlistnode

(data)

;while

(count < index -1)

node.next = cur.next;

cur.next = node;

return

true

;}

public

void

display1()

system.out.

println()

;}public

void

display2

(listnode head)

system.out.

println()

;}

public listnode searchprev

(int key)

pre = pre.next;

}return null;

}

public

void

remove

(int key)

//刪除的節點是否是頭結點if(

this

.head.data == key)

//1.找到key的前驅

listnode prev =

searchprev

(key);if

(prev == null)

//2.刪除節點

prev.next = prev.next.next;

}

public

boolean

contains

(int key)

cur = cur.next;

}return

false;}

//刪除所有值為key的節點

public listnode removeallkey

(int key)

listnode pre =

this

.head;

listnode cur = pre.next;

while

(cur != null)

if(pre.next.data != key)

}//判斷頭節點是否要刪除if(

this

.head.data == key)

return

this

.head;

}

public listnode removeallkey

(int key)

listnode pre =

this

.head;

listnode cur = pre.next;

while

(cur != null)

if(pre.next.data != key)

}//判斷頭節點是否要刪除if(

this

.head.data == key)

return

this

.head;

}

//反轉乙個單鏈表

//發一:頭插法

//法二:三個引用改變指向

public listnode reverselist()

/**/

while

(cur != null)

cur.next = prev;

prev = cur;

cur = curnext;

// curnext=cur.next;

}return newhead;

}

public

void

reverselist2()

}

思路:慢指標一次走一步,快指標一次走兩步

public listnode middlenode()

return slow;

}

思路:快慢指標,快指標先走k步,再一人一步向前走,直到快指標為空

//查詢鍊錶中倒數第k個節點:快慢指標

public listnode findkthkey

(int k)

listnode fast =

this

.head;

listnode slow =

this

.head;

while

(k -

1>0)

else

}while

(fast.next != null)

return slow;

}

實現鍊錶及相關的方法 2

思路 下面提供兩種方法,其實大同小異,但是因為鍊錶的最後乙個元素需要指向空,如果少了這個就會出現問題。所以在方法二中,遍歷的過程就將末尾指向空。方法一 將大的資料放在x的右邊,小的資料放在x的左邊 public listnode parttition int x else else else cur...

鍊錶的相關實現

class node public class lianbiao else head node size 頭刪 public void popfront head head.next if head null else size 尾插 void pushback int val else size ...

linux 鍊錶及相關鍊錶操作

1.鍊錶結構體 struct list head2.list entry define container of ptr,type,member container of ptr,type,member ptr為list head指標,type為包含list head結構體物件型別,member為鍊...