如何实现java链表中的基本操作(增、删、查、改)

互联网 19-11-28

链表也是一个线性的数据结构,与数组不同的是,链表在内存中的存储方式是随机存储。

下面给出涵盖链表四个操作的一个完整的例子,有几点需要注意的是:

(一)在增删改查之前,都需要对给出的下标进行边界判断;

(二)增加一个名为last的节点,可以方便在链表的尾部进行操作,省去了查找到最后一个节点的时间复杂度;

(三)在链表的内部插入元素时,我们先找到要插入位置的前一个节点prevNode,然后可以记录下prevNode的next,插入时先将prevNode的next指向要插入的节点,再将要插入的节点的next指向当前的next。这一点和C++中的操作也略有不同;

(四)删除节点时,用removedNode来记录删除节点的返回值,并且不要忘了size要减1。

相关免费视频教程推荐:java免费视频教程

操作示例如下:

public class MyLinkedList {     //定义一个静态的内部类     private static class Node{         int data;         Node next;         Node(int data){             this.data = data;         }     }       private Node head;     private Node last;//为了方便尾部插入元素的操作     private int size;//size表示链表的实际长度       public void insert(int data, int index)throws Exception{         if(index < 0 || index > size)             throw new IndexOutOfBoundsException("超出链表节点范围!");         Node insertedNode = new Node(data);         if(size == 0){//插入第一个元素时元素个数为0             head = insertedNode;             last = insertedNode;         }else if(size == index){//在链表的末尾插入             last.next = insertedNode;             last = insertedNode;         }else{             Node prevNode = get(index - 1);             Node nextNode = prevNode.next;             prevNode.next = insertedNode;             insertedNode.next = nextNode;         }         size++;     }       public void update(int data, int index) throws Exception{         if(index < 0 || index >= size)             throw new IndexOutOfBoundsException("超出链表节点范围!");         if(index == 0)             head.data = data;         else if(index == size - 1)             last.data = data;         else{             Node temp = get(index);             temp.data = data;         }     }       public Node remove(int index) throws Exception {         if(index < 0 || index >= size){             throw new IndexOutOfBoundsException("超出链表节点范围!");         }         Node removedNode = null;//不给removedNode分配堆内存         if(index == 0){             removedNode = head;             head = head.next;         }         else if(index == size - 1){             //删除尾结点             Node prevNode = get(index - 1);             removedNode = prevNode.next;             prevNode.next = null;             last = prevNode;         }         else{             Node prevNode = get(index - 1);             Node nextNode = prevNode.next.next;             removedNode = prevNode.next;             prevNode.next = nextNode;         }         size--;         return removedNode;     }           //查找链表元素     public Node get(int index) throws Exception{         if(index < 0 || index >= size){             throw new IndexOutOfBoundsException("超出链表节点范围!");         }         Node temp = head;         for(int i = 0; i < index; i++){             temp = temp.next;         } //        size--;         return temp;     }       //输出链表     public void output(){         Node temp = head;         while(temp != null){             System.out.println(temp.data);             temp = temp.next;         }     }       public static void main(String[] args) throws Exception{         MyLinkedList myLinkedList = new MyLinkedList();         myLinkedList.insert(3,0);         myLinkedList.insert(7,1);         myLinkedList.insert(9,2);         myLinkedList.insert(5,3);         myLinkedList.insert(6,1);         myLinkedList.remove(0);         myLinkedList.update(2,1);         myLinkedList.output();         System.out.println(myLinkedList.size);     } }

想了解更多相关教程可以访问:java开发入门

以上就是如何实现java链表中的基本操作(增、删、查、改)的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: 链表
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:java中关于队列的数组和链表实现

相关资讯