Java单链表增删改查反转基本操作

来源:互联网 发布:js和jquery书籍 编辑:程序博客网 时间:2024/06/03 20:45

数据结构复习,代码是最好的说明。

节点类:

public class Node {    private Object object;    private Node next;    public Node(Object object) {        this.object = object;        next = null;    }    public Object getObject() {        return object;    }    public void setObject(Object object) {        this.object = object;    }    public Node getNext() {        return next;    }    public void setNext(Node next) {        this.next = next;    }}
链表类:

public class SingleLinkedList {    //头节点    private Node head;    //链表长度    private int size;    public SingleLinkedList() {        head = null;        size = 0;    }    /**     * 头插入     * @param o     */    public void addNewHead(Object o){        Node newHead = new Node(o);        newHead.setNext(head);        this.setHead(newHead);        size++;    }    /**     * 头删除     */    public void deleteHead(){        if(size==0){            return;        }        head=head.getNext();        size--;    }    /**     *  指定index插入     * @param index     * @param object     */    public void add(int index,Object object){        if(index>size){            return;        }        if (index==0){            addNewHead(object);            return;        }        Node temp=head;        while (index>1){            temp = temp.getNext();            index--;        }        Node node=new Node(object);        node.setNext(temp.getNext());        temp.setNext(node);        size++;    }    /**     * 指定index删除,修改、查询方法同理     * @param index     */    public void delete(int index){        if(index>=size){            return;        }        if (index==0){            deleteHead();            return;        }        Node temp=head;        while (index>1){            temp = temp.getNext();            index--;        }        temp.setNext(temp.getNext().getNext());        size--;    }    /**     *  尾插入     * @param o     */    public void append(Object o){        add(size,o);    }    /**     * 顺序输出、逆序压栈     */    public void printAllNode(){        if(size==0){            return;        }        Node temp = head;        while (temp.getNext()!=null){            System.out.print(temp.getObject().toString()+"->");            temp = temp.getNext();        }        System.out.print(temp.getObject().toString());        System.out.println();    }    /**     * 递归反转,思想:右节点递归,左右节点指向反转     * @return     */    public Node reverseR(Node head){        if (head==null||head.getNext()==null){            return head;        }        Node reversedHead=reverseR(head.getNext());        head.getNext().setNext(head);        head.setNext(null);        return reversedHead;    }    /**     * 遍历反转,利用前节点、当前节点、后节点遍历链表,每次前节点与当前节点指向反转,最后头尾反转     */    public void reverse(){        if (head==null||head.getNext()==null){            return;        }        Node pre = head;        Node cur = head.getNext();        Node next;        while (cur!=null){            next = cur.getNext();            cur.setNext(pre);            pre = cur;            cur = next;        }        head.setNext(null);        head = pre;    }    public Node getHead() {        return head;    }    public void setHead(Node head) {        this.head = head;    }    public int getSize() {        return size;    }    public void setSize(int size) {        this.size = size;    }}
链表反转有参考http://www.cnblogs.com/iamkk/p/5971252.html

如有错误,欢迎纠正!



原创粉丝点击