java单链表

来源:互联网 发布:衬衣有哪些面料知乎 编辑:程序博客网 时间:2024/05/01 17:18

节点类

package link; /**  * @author wangpei  * @version  *创建时间:2017年3月3日 下午5:54:04  * javaz单链表的操作 */public class Node {    protected Node next;    protected int data;//数据区    public Node(){    }    public Node(int data){        this.data=data;    }    public void print(Node current){        System.out.println("data="+current.data);    }}

主要操作类:

package link; import java.util.ArrayList;/**  * @author wangpei  * @version  *创建时间:2017年3月3日 下午5:58:10  * 单链表的操作 */public class Only {    public void create_linkList1(Node head,int []data){//头插法建立单链表         for(int i=0;i<data.length;i++){         Node s=new Node(data[i]);//创建一个新节点         s.next=head.next;         head.next=s;         }    }    public void create_linkList2(Node node,Node r,int []data){//尾插法建立单链表        for(int i=0;i<data.length;i++){         Node s=new Node(data[i]);//创建一个节点         r.next=s;         r=s;         }    }    public void printAllNode(Node h){//打印所有节点信息。        Node current =h.next;        while(current!=null){            current.print(current);             current=current.next;        }    }    public ArrayList<Integer>  printAllNodeBytail(Node listNode){//打印所有节点信息。        ArrayList<Integer> list=new ArrayList<Integer>();        Node current =listNode.next;        while(current!=null){            list.add(current.data);             current=current.next;        }        for(int i=0;i<list.size()/2;i++){            int t=list.get(i);            list.set(i, list.get(list.size()-i-1));            list.set( list.size()-i-1,t);        }        return list;    }    public boolean delete(Node node,int i){//删除单链表head上的i节点        Node p=get_Node(node,i-1);//获取到第i个节点        p.next=p.next.next;        return false;    }    //根据头结点查找第i各节点    private Node get_Node(Node head,int i) {        Node current =head;        int j=0;         while(current!=null){             if(j==i)                 break;              current=current.next;              j++;         }         return current;    }    //删除链表中的重复节点    public void deleteAgatin(Node head){    }    //单链表的倒置,思想:从原来的链表中依次读出结果按头插法存在新链表中。    public void reverse(Node head){        Node p=head.next;        Node q;        head.next=null;        while(p!=null){            System.out.println("进入该循环");            q=p;            p=p.next;            q.next=head.next;            head.next=q;        }    //  return rehead;    }    public static void main(String[] args) {        Node head=new Node();        Node r=head;        Only o=new Only();        int []data={1,2,3,4,5};        o.create_linkList2(head,r,data);//插入一个节点        o.printAllNode(head);//      o.create_linkList2(2);//插入一个节点//      o.create_linkList2(3);//插入一个节点    //  o.printAllNode(head);        //o.delete(1);//      o.reverse(head);//      o.printAllNode( head);        ArrayList<Integer> list=o.printAllNodeBytail(head);        for(int i:list){            System.out.println("list="+i);        }    }}
1 0
原创粉丝点击