資料結構之單鏈表(二)
阿新 • • 發佈:2018-12-15
//判斷單鏈表是否有環:思路:設定兩個"指標",一個走一步,一個走兩步,若存在環,則一定會存在有相交的位置點 public boolean isLoop(Linklist LNode){ Node p=head.next; Node q=head.next.next; for(;p!=null;p=p.next){ for(;q!=null;q=q.next){ if(p.equals(q)){ return true; } } } return false; } //輸出單鏈表中倒數第K個結點 public void getNode(int K){ int size=getLength(); int count=0; if(K<0 || K>size){ System.out.println("要求輸出的位置不合法!"); } Node p=head; for(;p.next!=null;p=p.next){ if(size-count==K){ System.out.println(p.vlaue); } count++; }if(size-count==K){ System.out.println(p.vlaue); } } //如果存在兩個連結串列相交的情況,找出相交的結點 ***** public void getIntersection(Node head1,Node head2){ if(head1==null || head2==null){ return ; } Node p=head1; Node q=head2; int size1=0; for(;p.next!=null;p=p.next){ size1++; } int size2=0; for(;q.next!=null;q=q.next){ size2++; } int diff=0; if(size1 > size2){ p=head1; q=head2; diff=size1-size2; }else{ p=head2; q=head1; diff=size2-size1; } for(int i=0;i<diff;i++){ p=p.next; } while(p!=null && q!=null){ if(p.vlaue==q.vlaue){ System.out.println(p.vlaue); } p=p.next; q=q.next; } } //單鏈表的逆置 ***** public void reverse(){ if(head.next==null || head.next.next==null){ return ; } Node p=head.next; Node q=p.next; Node s=q.next; p.next=null; q.next=p; if(s!=null) { p = q; q = s; s = s.next; while (q.next != null) { q.next = p; p = q; q = s; s = s.next; } q.next=p; } head.next=q; }