单链表基础操作的Java实现
2015-05-05 19:44
417 查看
链表是很多的数据结构的基础,比如说:队列,栈,二叉树,优先级队列等等,而链表也是很多公司面试和笔试的常考题。
链表的基本操作包括:判断是否为空,头部插入,尾部插入,根据key值查找,根据key值删除,遍历链表。
当然稍微复杂一点的操作还包括:链表的逆序,链表的排序等等。
在链表中,包含两个类:Node(节点)
当然这个Node类可以根据需要变得很复杂。
LinkList类:
LinkList类中只包含一个数据项,即对链表中第一个链节点的引用,叫做first,它是唯一的链表需要维护的永久信息,用以定位所有其他的链节点。从first出发,沿着链表通过每个链节点的next字段,就可以找到其他的链节点:
在LinkList类中包括对链表的一系列操作,包括增删改查等等。
其中最核心的是insertFirst()方法和insertLast()方法,其方法中对链表的操作思路在其他的方法会用到。
不多说了,把全部的代码粘贴如下(具体的操作大家可以参考我的资源《Java数据结构和算法》这本书):
下面是测试代码:
链表的基本操作包括:判断是否为空,头部插入,尾部插入,根据key值查找,根据key值删除,遍历链表。
当然稍微复杂一点的操作还包括:链表的逆序,链表的排序等等。
在链表中,包含两个类:Node(节点)
package com.qiao.lb; public class Node { public long data; public Node next; public Node(long data){ this.data=data; } public void displayLink(){ System.out.print("{"+data+"},"); } }
当然这个Node类可以根据需要变得很复杂。
LinkList类:
LinkList类中只包含一个数据项,即对链表中第一个链节点的引用,叫做first,它是唯一的链表需要维护的永久信息,用以定位所有其他的链节点。从first出发,沿着链表通过每个链节点的next字段,就可以找到其他的链节点:
class LinkList{ private Link first; public void LinkList(){ first=null;//表示目前为止链表中没有数据项,如果有,first字段中应该存有对第一个链接点的引用值 } }
在LinkList类中包括对链表的一系列操作,包括增删改查等等。
其中最核心的是insertFirst()方法和insertLast()方法,其方法中对链表的操作思路在其他的方法会用到。
不多说了,把全部的代码粘贴如下(具体的操作大家可以参考我的资源《Java数据结构和算法》这本书):
package com.qiao.lb; public class LianBiao { //最好不要用尾插法,因为每次尾插法都需要遍历整个链表 private Node first; public LianBiao(){ first=null; } public boolean isEmpty(){ return first==null; } public void insertFirst(long data){ Node newNode=new Node(data); newNode.next=first; first=newNode; } public void insertLast(long data){ Node newNode=new Node(data); Node current=first; if(current==null){ first=newNode; }else{ while(current.next!=null){ current=current.next; } current.next=newNode; } } public Node deleteFirst(){ Node temp=first; if(!isEmpty()){ first=first.next; } return temp; } public void displayList(){ Node current=first; while(current!=null){ current.displayLink(); current=current.next; } System.out.println(); } public Node find(long key){//找到第一个与key值相同的节点 Node current=first; while(current!=null){ long data=current.data; if(key==data){ return current; }else{ current=current.next; } } return current; } public Node delete(long key){ Node current=first;//表示当前节点,同时也表示要删除的节点 Node prior=current; while(current!=null){ long data=current.data; if(data==key){ Node temp=current; prior.next=current.next; return current; }else{ prior=current; current=current.next; } } return current; } }
下面是测试代码:
package com.qiao.lb; public class LinkListTest { public static void main(String[] args) { LianBiao biao=new LianBiao(); biao.insertLast(9); biao.insertLast(8); biao.insertLast(7); biao.insertLast(6); biao.insertLast(5); biao.insertLast(4); biao.insertLast(3); biao.insertLast(2); biao.displayList(); System.out.println("------------------------------------"); biao.delete(10); biao.displayList(); System.out.println("------------------------------------"); biao.deleteFirst(); biao.displayList(); System.out.println("------------------------------------"); Node node=biao.find(5); // System.out.println(node.data); System.out.println("------------------------------------"); biao.insertLast(10); biao.displayList(); } }
相关文章推荐
- 单链表的基础操作java实现
- java实现单链表的基础操作
- 链表基础操作与常见题目Java实现
- 数据结构学习笔记2(链表 上 单链表基础操作&实现多项式相乘)
- 单链表基础操作C++实现
- java实现单链表的添加和插入;评论中设定一个node类节点操作
- java操作excel文件基础架构实现,支持2007以上版本
- 黑马程序员_Java基础:实现多线程对共有数据的同步操作
- 数据结构基础(8) --单链表的设计与实现(1)之基本操作
- 数据结构基础(9) --单链表的设计与实现(2)之高级操作
- 数据结构复习--java实现单链表基本操作
- java实现单链表,巩固基础
- Java实现单链表的一些常用操作
- java实现单链表的基本操作
- 数据结构基础(8) --单链表的设计与实现(1)之基本操作
- 数据结构基础(8) --单链表的设计与实现(1)之基本操作
- 数据结构基础(8) --单链表的设计与实现(1)之基本操作
- 数据结构基础(9) --单链表的设计与实现(2)之高级操作
- 数据结构基础(9) --单链表的设计与实现(2)之高级操作
- 数据结构基础(9) --单链表的设计与实现(2)之高级操作