【題 1】找到鍊錶的倒數第n個節點
【分析】有效方法為使用2個指標node和temp。首先,2個指標都指向表頭結點,僅當temp(沿鍊錶)進行了(n-1)次移動,node開始一起移動,直至temp到達尾節點結束,此時node指標指向的就是倒數第n個節點
public listnode getnodefromend(int n)
listnode node = head, temp = head;
for(int
count = 1; count
< n; count++)
while(temp.getnext() != null)
return node;
}
【題 2】如何判定給定鍊錶是不是環
【分析】floyd環判定演算法。該方法使用2個在鍊錶中不同移動速度的指標。一旦他們進入環就會相遇。
public
boolean
isloop()
}return
false;
}
【題 3】判定給定鍊錶是否是環,如果環存在,找到環的起點
【分析】在判斷是環後,令slow = head,再讓兩個指標每次移動乙個節點,相遇時即為環的起點。
設環的起點是鍊錶的第(m+1)個節點,環有n個節點,相遇時在環的第c個節點,slow移動了x步,fast移動了y步
x = kn + m + c; y = 2x = 2kn + 2m +2c; y - x = kn + m + c = tn(相差的步數應該是n的整數倍);
所以m + c = pn,即m = pn - c
所以slow從head開始移動m + 1步時指向的是環的起點,
fast已經是環的第c個點了,再移動(m+1)步,即(c + pn - c +1) 步,指向節點為
(pn +1) mod n = 1即環的首節點
public listnode findloopbeginnode()
}if(isloop)
return slow;
}return
null;
}
【題 4】如果給定鍊錶存在環,求環的長度
【分析】當在環中slow和fast相遇時,令slow不變,fast繼續移動,步長變為1,記下移動的次數k,當slow與fast再次相遇時,k即為環的長度
public
intlooplength()
}if(isloop)
return k;
}return
0;}
【題 5】逆置單向鍊錶
public
void
reverse()
head.setnext(reversenode);
}
【題 6】假設2個單向鍊錶在某個節點相交後,成為乙個單向鍊錶。兩個鍊錶的表頭節點是已知的,但是相交的節點未知。也就是說它們相交之前各自的節點數是未知的,並且兩個鍊錶的節點數也可能不同。假設鍊錶list1和鍊錶list2在相交前的節點數分別為m和n,那麼m和n的大小是不確定的。請設計演算法找到兩個鍊錶的合併點。
【分析】獲取2個鍊錶長度,計算處長度差d,從較長鍊錶開始移動d步,然後大家一起以相同速度移動,當指標相等時即為合併點
}【題 7】如何查詢鍊錶的中間結點
【分析】使用2個指標,乙個步長2,乙個步長1
方法一
public listnode midnode()else
if(n == 1)
}
return slow.getnext();
}
方法二
public listnode midnode()
return slow.getnext();
}
【題 8】從表尾開始輸出鍊錶
【分析】運用遞迴
public
void
printfromend(listnode head)
printfromend(head.getnext());
system.out.println(head.getdata());
}
【分析】看做是有n個節點的迴圈鍊錶,每個人給個編號(1~n)
public
int getleader(int n,int m)
p.setnext(list.gethead().getnext()); //設定尾節點指向首節點
//現在p指向的是尾節點
for( init count = n; count > 1; count--)
p.setnext(p.getnext().getnext()); //從鍊錶中刪除淘汰選手
}return
list.gethead().getnext().getdata();
}
關於鍊錶的一些問題的整理
鍊錶的類通常表示如下 public class listnode 一 建立鍊錶 根據給定的陣列使用尾插法和頭插法建立鍊錶 public static listnode createlistnode int array return node private static void addnode l...
資料結構 關於順序表 鍊錶的一些事
一 順序表 的儲存單元依次儲存資料元素的線性結構。2.位址連續的空間,一般情況下採用陣列,陣列有靜態陣列和動態陣列 因此,順序表分為靜態順序表 動態順序表 靜態順序表 結構體變數分別為 乙個陣列 有效元素的個數 datatype array max size 儲存資料的空間 int size 1.有...
關於指標和鍊錶中的一些問題
學習資料結構時對指標和鍊錶很迷糊,也就自己總結 一下,如果有錯誤或者理解上的錯誤歡迎指正,謝謝 指標 指標是什麼,指標就是指標型別,就和int 型別,float型別等一樣,而對於指標個人當時學習的時候總被 弄得迷糊,的作用 1 型別說明符,int p,定義p是乙個指向整型的指標變數,p就是這個位址,...