1. 程式人生 > >java資料結構初學(記錄)單鏈表交換兩節點(3)可與之前寫的進行對比(程式碼優化)——如果後續徹底搞明白後將精煉此部分內容,刪除部分內容

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); //        }     }