java复习之链表1(单链表)

java复习之链表

主要复习单链表,多链表,双向链表及相关操作

单链表

这里出了点小问题,用框架多了,脑子瓦特了,break和return 混了,return强制结束当前的方法,不论在多少层嵌套中,break结束当前的循环(while也是个循环啊,qaq,基础代码不写手生了啊!)

package learn;

public class LinkedList {
    public static void main(String[] args) {
        Node node1= new Node("1");
        Node node2= new Node("2");
        Node node3= new Node("3");
        Node node4= new Node("4");
        LinkList linkList = new LinkList();
        linkList.add(node1);
        linkList.add(node2);
        linkList.add(node3);
        linkList.add(node4);
        linkList.list();
    }
}


class Node{
    public String data;
    public Node next;

    public Node(String data) {
        this.data = data;
    }

    @Override
    public String toString() {
        return "Node{" +
                "data='" + data + '\'' +
                '}';
    }

}
class LinkList{
    private Node head;
    private Node temp;
    public LinkList() {
        head=new Node("0");
        temp=head;
    }
    public void add(Node node){
        while (true) {
           if(temp.next==null){
                break;
            }
            temp=temp.next;
        }
         temp.next=node;
    }
    public void list(){
        if(head.next==null){
            return;
        }
        temp=head.next;
        while (true){
            if(temp==null){
                break;
            }
            System.out.println(temp);
            temp=temp.next;
        }
    }
}

接下来是对插入的节点进行判断,按顺序输出
这里主要是对临时标记(指针?引用)temp的使用,temp从头节点开始,使用temp.next和新插入的节点进行比较,只要大于新插入的节点,那就进行插入,插入的过程就不说了,看代码就两行。

package learn;

public class LinkedList {
    public static void main(String[] args) {
        Node node1= new Node(1);
        Node node2= new Node(2);
        Node node3= new Node(3);
        Node node4= new Node(7);
        LinkList linkList = new LinkList();
        linkList.addByOrder(node1);
        linkList.addByOrder(node4);
        linkList.addByOrder(node3);
        linkList.addByOrder(node2);
        linkList.addByOrder(new Node(5));
        linkList.list();
    }
}


class Node{
    public int  data;
    public Node next;

    public Node(int data) {
        this.data = data;
    }

    @Override
    public String toString() {
        return "Node{" +
                "data='" + data + '\'' +
                '}';
    }

}
class LinkList{
    private Node head;
    private Node temp;
    public LinkList() {
        head=new Node(0);
        temp=head;
    }
    public void addByOrder(Node node){
        temp=head;
        boolean flag=false;
        while (true){
            if(temp.next==null){
                break;
            }
            if(temp.next.data>node.data){
                break;
            }else if(temp.next.data==node.data){
                flag=true;
                break;
            }
        temp=temp.next;
        }
        if(flag==false){
            node.next=temp.next;
            temp.next=node;
        }
    }
    public void add(Node node){
        while (true) {
           if(temp.next==null){
                break;
            }
            temp=temp.next;
        }
         temp.next=node;
    }
    public void list(){
        if(head.next==null){
            return;
        }
        temp=head.next;
        while (true){
            if(temp==null){
                break;
            }
            System.out.println(temp);
            temp=temp.next;
        }
    }
}

再加一个删除的方法,还是利用temp

    public void delete(Node node){
        temp=head;

        while(temp.next!=null){
            if(temp.next.data==node.data){
                temp.next=temp.next.next;
                break;
            }
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章