1. 程式人生 > >java實現單向連結串列CRUD,反轉,排序,查詢倒數第k個元素,遞迴輸出等操作

java實現單向連結串列CRUD,反轉,排序,查詢倒數第k個元素,遞迴輸出等操作

package myLink;

import javax.xml.transform.Templates;

public class LianBiao {
    static Node head=null;
    /**
     * 查詢單鏈表的中間節點
     * */
    public Node getMid(){
        Node p=head;
        Node q=p;
        while(p!=null&&p.next!=null&&p.next.next!=null){
            p=p.next.next;
            q=q.next;
        }
        return
q; } /** * 連結串列長度 * */ public int getLen(Node head){ int count=0; Node temp=head; while(temp!=null){ temp=temp.next; count++; } return count; } /** * 增加節點 * */ public void add(Object obj){ Node n=new
Node(obj); if(head==null){ head=n; return; } Node temp=head; while(temp.next!=null){ temp=temp.next; } temp.next=n; } /** * 遍歷連結串列 * */ public void traver(Node head){ Node temp=head; while
(temp!=null){ System.out.print(temp.obj+"\t"); temp=temp.next; } } /** * 查詢倒數第k個元素 * 思路:p,q先=頭節點,p先前進k,p,q再同時前進,返回q * */ public Node findDSElem(int k){ Node p=head; Node q=head; int count=0; if(k<0||k>getLen(head)){ return null; } while(count!=k){ p=p.next; count++; } while(p!=null){ p=p.next; q=q.next; } return q; } /** * 對連結串列進行排序 * */ public Node orderList(Node n){ Object tmp=null; Node curNode=head; Node nextNode=curNode.next; while(curNode.next!=null){ nextNode=curNode.next; while(nextNode!=null){ if((int)curNode.obj>(int)nextNode.obj){ tmp=curNode.obj; curNode.obj=nextNode.obj; nextNode.obj=tmp; } nextNode=nextNode.next; } curNode=curNode.next; } return head; } /** * 遞迴遍歷 * */ public void printDiGui(Node n){ if(n!=null){ System.out.print(n.obj+"\t"); printDiGui(n.next); } } /** * 刪除重複節點 * */ public void deleteCopy(Node n){ Node cur=head; while(cur.next!=null){ Node next=cur.next; if(cur.obj==next.obj){ cur.next=next.next; cur=cur.next; }else{ cur=cur.next; } } } /** * 刪除節點 * */ public void delete(int index){ if(index<1||index>getLen(head)){ return; } //頭結點,頭指標有待完善 if(index==1){ head.next=head.next.next; return; } Node preNode=head; Node curNode=preNode.next; int count=1;//count==2 while(curNode!=null){ if(index==count){ preNode.next=curNode.next; return; } preNode=curNode; curNode=curNode.next; count++; } } public static void main(String[] args) { LianBiao lb=new LianBiao(); lb.add(1); lb.add(3); lb.add(9); lb.add(5); lb.add(4); lb.add(4); lb.add(2); lb.add(6); /*lb.orderList(head); lb.traver(head);*/ lb.traver(head); System.out.println(); //System.out.println(lb.getMid().obj); //lb.deleteCopy(head); //System.out.println("長度:"+lb.getLen(head)); //System.out.println(lb.findDSElem(1).obj); lb.printDiGui(head); lb.delete(2); System.out.println(); lb.printDiGui(head); } } class Node{ Object obj; Node next; public Node(Object obj){ this.obj=obj; } public Node(){ } /** * @return the obj */ public Object getObj() { return obj; } /** * @param obj the obj to set */ public void setObj(Object obj) { this.obj = obj; } /** * @return the next */ public Node getNext() { return next; } /** * @param next the next to set */ public void setNext(Node next) { this.next = next; } }