用java实现单向链表

来源:互联网 发布:星星知多少 编辑:程序博客网 时间:2024/06/04 21:47
主要就是简单的指针移动,之前有人让我帮改了一个链表的程序,但我觉得实现有问题 改完 自己又写了一个,代码在下面

public class MyLinkedList {
    intsize;
    Nodehead;
    Nodetail;

    publicMyLinkedList() {
       size =0;
       head =null;
       tail =null;
    }

    public voidaddElement(A inNode) {
       if (head ==null) {
          head = tail= new Node(inNode);
       } else{
          tail.next =new Node(inNode);
          tail =tail.next;
       }
      size++;
    }

    public voidupdateElement(int index, A content) {
       if (index< 0 || index >= size) {
         return;
       }
       NodecurNode = head;
       while (index> 0) {
          curNode =curNode.next;
         index--;
       }
      curNode.content = content;
    }

    public AgetElement(int index) {
       if (index< 0 || index >= size) {
          returnnull;
       }
       NodecurNode = head;
       while (index> 0) {
          curNode =curNode.next;
         index--;
       }
       returncurNode.content;
    }

    public voiddeleteElement(int index) {
       if (index< 0 || index >= size) {
         return;
       }
       if (index ==0) {
          head =head.next;
          if (size ==1) {
             tail =null;
          }
         size--;
         return;
       }
       NodepreNode = null;
       NodecurNode = head;
       while (index> 0) {
          preNode =curNode;
          curNode =curNode.next;
         index--;
       }

       preNode.next= curNode.next;
       if (index ==(size - 1)) {
          tail =preNode;
       }
      size--;
    }

    public voiddeleteElement(A deleNode) {
       //这里可以用来报异常
       if (size ==0) {
         return;
       }

       if(head.content.equals(deleNode)) {
          head =head.next;
          if (size ==1) {
             tail =null;
          }
         size--;
         return;
       }

       NodecurNode = head.next;
       NodepreNode = head;
       while(curNode != null) {
          if(curNode.content.equals(deleNode)) {
             if (curNode== tail) {
                preNode.next= null;
                tail =preNode;
             } else{
                preNode.next= curNode.next;
             }
            size--;
            return;
          }
          preNode =curNode;
          curNode =curNode.next;
       }
      return;
    }

    public voidshowList() {
       if (size ==0) {
         System.out.println("链表为空");
         return;
       }
       NodecurNode = head;
       while(curNode != null) {
         System.out.print(curNode.content + "->");
          curNode =curNode.next;
       }
      System.out.println("null");
    }

    publicstatic void main(String[] args) {
       MyLinkedListmyLinkedList = new MyLinkedList();
      myLinkedList.addElement("A");
      myLinkedList.addElement("B");
      myLinkedList.addElement("C");
      myLinkedList.addElement("D");
      myLinkedList.showList();
      myLinkedList.deleteElement("D");
      myLinkedList.showList();
      myLinkedList.updateElement(2, "E");
      myLinkedList.showList();
      System.out.println(myLinkedList.getElement(1));
      myLinkedList.deleteElement(2);
      myLinkedList.showList();
    }
}

class Node {
    publicNode(A content) {
       this.content= content;
       next =null;
    }

    Acontent;
    Nodenext;
}
0 0
原创粉丝点击