美文网首页程序员
链表(增删改查)Java版

链表(增删改查)Java版

作者: Ford_ | 来源:发表于2018-04-10 15:19 被阅读16次

    1.链表节点类

    public class NodeLink {

    public Object data;

    public NodeLink next;

    public NodeLink(Object data){

    this.data=data;

    } }

    2.链表功能测试类

    public class MyNode {

        private static NodeLink  head;

    public static void main(String[] args) {

    // TODO Auto-generated method stub

              addNodeItem("aaa");//添加三个节点

              addNodeItem("bbb");

              addNodeItem("ccc");

              addIndex(1,"wang");//添加指定的节点       

              deleteNode(1);//删除指定位置的节点

              putNode(); //遍历输出节点

              System.out.println("链表长度为:"+length()); //输出节点长度

              checkNode("bbb");//查找节点bbb值 所在位置

    }

    //添加指定位置的节点     

    private static void addIndex(int index,Object value){

    if(index<1||index>length()+1)

    return ;

    NodeLink temp=head;

    NodeLink addNode=new NodeLink(value);

    int len=1;

    while(temp!=null){

    if(index==len){

    addNode.next=temp.next;

    temp.next=addNode;

    return ;

    }

    len++;

    temp=temp.next;

    }

    }

    //删除指定位置的节点

    private static void deleteNode(int index){

    if(index<1||index>length()+1)

    return ;

    NodeLink temp=head;

    int len=1;

    while(temp!=null){

    if(index==len){

    temp.next=temp.next.next;

    return;

    }

    len++;

    temp=temp.next;

    }

    }

    //向尾节点添加新节点

    private static void addNodeItem(Object value){

    NodeLink addNode=new NodeLink(value);

    if(head==null){

    head=new NodeLink(value);

                return;

    }

    //下面这句话很重要 temp和head的哈希码值相同 指向同一内存空间 所以temp新增的节点也链在head上

    NodeLink temp=head;

    while(temp.next!=null){

    temp=temp.next;

    }

    temp.next=addNode;

    }

    private static int length(){

    int len=0;

    NodeLink temp=head;

    while(temp!=null){

    len++;

    temp=temp.next;

    }

    return len;

    }

    //遍历节点

    private static void putNode(){

    NodeLink temp=head;

    while(temp!=null){

    System.out.println(temp.data);

    temp=temp.next;

    }

    }

    private static void checkNode(Object value){

    NodeLink temp=head;

      for(int i=0;i<length();i++){

    if(temp.data.equals(value)){

    System.out.println(temp.data+"位置在i="+(i+1));

    break;

    }

    temp=temp.next;

    }

    //链表翻转

    private static NodeLink reverseNodeTemp(NodeLink heads){

    if(heads==null) return heads;

    NodeLink per=null;

    NodeLink temp;

    while(heads!=null){

    temp=heads.next;

    heads.next=per;

    per=heads;

    heads=temp;

    }

    return per;

    }

    //递归翻转

    //递归 翻转链表

    private static NodeLink reverseNode(NodeLink heads){

        if(heads.next==null) return heads;

        NodeLink temp=

        reverseNode(heads.next);

        heads.next.next=heads;

        heads.next=null;

        return temp;

        }

    输出结果:

    aaa

    bbb

    ccc

    链表长度为:3

    bbb位置在i=2

    相关文章

      网友评论

        本文标题:链表(增删改查)Java版

        本文链接:https://www.haomeiwen.com/subject/tjcnhftx.html