如何实现java链表中的基本操作(增、删、查、改)
Java / 管理员 发布于 8年前 249
链表也是一个线性的数据结构,与数组不同的是,链表在内存中的存储方式是随机存储。
下面给出涵盖链表四个操作的一个完整的例子,有几点需要注意的是:
(一)在增删改查之前,都需要对给出的下标进行边界判断;
(二)增加一个名为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){//插入第一个元素时元素个数为0head = 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链表中的基本操作(增、删、查、改)的详细内容,更多请关注其它相关文章!
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号