java資料結構初學(記錄)單鏈表交換兩節點(3)可與之前寫的進行對比(程式碼優化)——如果後續徹底搞明白後將精煉此部分內容,刪除部分內容
public void swap(String number1, String number2){ // 定義節點 StudentNode t1,t2,t3,t4; /** * * t1:頭節點 * t2:p1 * t3:p2 * t4:p3 */ t1=t2=t3=t4=null; StudentNode temp=null; // 定義一個頭節點 StudentNode p = head; // 定義計數器 此計數器的作用是用來判斷 number1與number2誰在前 int cnt1=0, cnt2=0; //遍歷,確定number1與number2的順序 while(p.getNext() != null){ cnt1++; if(p.getNext().getStu().getNumber().equals(number1)){ // 查詢 number1 t1 = p; t2 = p.getNext(); break; } p=p.getNext(); } p = head; while(p.getNext() != null){ cnt2++; if(p.getNext().getStu().getNumber().equals(number2)){ // 查詢number2 t3 = p; t4 = p.getNext(); break; } p=p.getNext(); } /** * 兩個節點相鄰 * t1是前一個節點 * t2和t3相同 */
if(cnt1+1 == cnt2){ t2.setNext(t4.getNext()); t1.setNext(t4); t4.setNext(t2); }else if(cnt2+1 == cnt1){ // t3,t4,t1,t2 t4.setNext(t2.getNext()); t3.setNext(t2); t2.setNext(t4); }else{ t1.setNext(t4); temp = t4.getNext(); t4.setNext(t2.getNext()); t2.setNext(temp); t3.setNext(t2); }
// }else if(cnt1 < cnt2){ // number2 在前面 // // // t3、t4、t1、 t2 // t3.setNext(t2); // temp = t2.getNext(); // t2.setNext(t4.getNext()); // t4.setNext(temp); // t1.setNext(t4); // } }