單鏈表習題

2021-09-29 10:41:55 字數 3590 閱讀 2908

class

linkedlist

else

}//尾插法

public

void

addlast

(int data)

else

cur.next = node;}}

/** * 找到index-1位置的節點

* 返回的是index-1位置的節點的引用

* @param index

* @return

*/private node searchindex

(int index)

return cur;

}private

void

checkindex

(int index)

}public

boolean

contains

(int key)

cur = cur.next;

}return

false;}

public

intgetlength()

return count;

}// 找到插入位置前乙個結點便可實現插入

public

boolean

addindex

(int index,

int data)

//1、找到index位置的前驅

node cur =

searchindex

(index)

;//2、插入

node node =

newnode

(data)

; node.next = cur.next;

cur.next = node;

return

true;}

private node searchprev

(int key)

prev = prev.next;

}return null;

}//刪除第一次出現關鍵字為key的節點

public

void

remove

(int key)

//2、不是頭節點

node prev =

searchprev

(key)

;//刪除的值不在鍊錶範圍內

if(prev == null)

node del = prev.next;

prev.next = del.next;

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

public

void

removeallkey

(int key)

else}if

(this

.head.data == key)

}public

void

clear()

public node reverselist()

prev = cur;

cur = curnext;

}return cur;

}public

void

display2

(node newhead)

system.out.

println()

;}public

void

display()

system.out.

println()

;}public node middlenode1()

return cur;

}public node middlenode()

return slow;

}public node findkthtotail

(int k)

node fast =

this

.head;

node slow =

this

.head;

while

(k -

1>0)

else

}while

(fast.next != null)

return slow;

}/**

** @param x 基準

* @return

*/public node partition

(int x)

else

}else

else

} cur = curnext;

}//如果第乙個線段沒有資料 沒有比基準小的資料

if(beforestart == null)

beforeend.next = afterstart;

return beforestart;

}public node deleteduplication()

cur = cur.next;

tmp.next = cur;

}else

}return newhead.next;

}/**

* 1、定義兩個引用,目的:找到單鏈表的中間位置

* 2、進行翻轉,翻轉的是後半部分

* 3、乙個head從頭開始走,slow從尾巴開始走

* 4、只要發現對應的data不相同,那麼就不是回文

* @return

*///回文

public

boolean

chkpalindrome()

if(this

.head.next == null)

node fast =

this

.head;

node slow =

this

.head;

while

(fast != null && fast.next != null)

//翻轉

node p = slow.next;

while

(p != null)

}//判斷回文

while

(this

.head != slow)if(

this

.head.next == slow)

this

.head =

this

.head.next;

slow = slow.next;

}return

true;}

//創乙個環出來

public

void

createcycle()

cur.next =

this

.head.next.next;

}public

boolean

hascycle()

}return

false;}

public node detectcycle()

}if(fast == null || fast.next == null)

fast =

this

.head;

while

(fast != slow)

return fast;

}}

單鏈表習題(下)

public void display node newhead system.out.println public node deleteduplication cur cur.getnext else 此處tmp表示單鏈表的尾巴,如果未置為null,那麼列印時會出現死迴圈 tmp.setnext...

單鏈表習題整理(七)

假設有兩個按元素值遞增有序排列的線性表a和b,均以單鏈表作儲存結構,請編寫演算法將a表和b表歸併成乙個按元素值遞減有序 即非遞增有序,允許表中含有值相同的元素 排列的線性表c,並要求利用原表 即a表和b表 的結點空間構造c表 對兩個或兩個以上,結點按元素值遞增 遞減排序的單鏈表進行操作,應採用 指標...

單鏈表練習題

題目一 假設有兩個按元素值遞增有序排列的線性表 a 和 b,均以單鏈表作儲存結構,請編寫演算法將 a 表和 b 表歸併成乙個按元素值遞減有序 即非遞增有序,允許表中含有值相同的元素 排列的線性表 c,並要求利用原表 即 a 表和 b 表 的結點空間構造 c 表。演算法 誰的值小誰就先插入鍊錶c中,插...