多平台统一管理软件接口,如何实现多平台统一管理软件接口
286
2023-03-23
Java数据结构之简单链表的定义与实现方法示例
本文实例讲述了java数据结构之简单链表的定义与实现方法。分享给大家供大家参考,具体如下:
一、概述:
1、原理:
只有一个数据项(链接点Link),每个数据插入时都是对第一个数据的引用。
2、插入数据说明:
当链表没有数据时,插入的值就是第一个数据,如果链表里有数据,就把当前的数据的next指针指向第一个数据。
3、插入数据图:
4、特点:先进后出
5、实现功能:
数据插入,指定位置插入,显示,查询,删除等
6、删除原理
7、插入头节点原理
二、实现:
1、创建节点
/**
* @描述 节点
* @项目名称 Java_DataStruct
* @包名 com.struct.linklist
* @类名 Node
* @author chenlin
* @date 2010年6月26日 上午7:58:59
* @version 1.0
*/
public class Node {
public long data;
public Node next;
public long getData() {
return data;
}
public void display(){
System.out.print(data + " ");
}
public Node(long data) {
this.data = data;
}
public void setData(long data) {
this.data = data;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}
2、链表实现
/**
* @描述 链表
* @项目名称 Java_DataStruct
* @包名 com.struct.linklist
* @类名 LinkList
* @author chenlin
* @date 2010年6月26日 上午8:00:28
* @version 1.0
*/
public class LinkList {
private Node first;
public LinkList(){
first = null;
}
/**
* 插入数据
* @param value
*/
public void insertFirst(long value){
Node newNode = new Node(value);
if (first == null) {
first = newNode;
}else {
//把first节点往下移动
newNode.next = first;
//把插入的节点作为新的节点
first = newNode;
}
EVnSC }
/**
* 删除头节点
* @param value
* @return
*/
public Node deleteFirst(){
if (first == null) {
throw new RuntimeException("链表数据不存在");
}
Node temp = first;
first = temp.next;
return temp;
}
public Node deleteByKey(long key){
Node current = first;
Node last = first;
while(current.data != key){
if (current.next == null) {
System.out.println("没找到节点");
return null;
}
last = current;
current = current.next;
}
if (current == first) {
//return deleteFirst();
//指向下个就表示删除第一个
first = first.next;
}else {
last.next = current.next;
}
return current;
}
/**
* 显示所有的数据
*/
public void display(){
if (first == null) {
//throw new RuntimeException("链表数据不存在");
return;
}
Node current = first;
while(current != null){
current.display();
current = current.next;
}
System.out.println("---------------");
}
/**
* 查找节点1
* @param value
* @return
*/
public Node findByValue(long value){
Node current = first;
while(current != null){
if (current.data != value) {
current = current.next;
}else {
break;
}
}
if (current == null) {
System.out.println("没找到");
return null;
}
return current;
}
/**
* 查找节点2
*
* @param key
* @return
*/
public Node findByKey(long key) {
Node current = first;
while (current.data != key) {
if (current.next == null) {
System.out.println("没找到");
return null;
}
current = current.next;
}
return current;
}
/**
* 根据索引查找对应的值
* @param position
* @return
*/
public Node findByPosition(int position){
Node current = first;
//为什么是position - 1,因为要使用遍历,让current指向下一个, 所以position - 1的下个node就是要找的值
for (int i = 0; i < position - 1 ; i++) {
current = current.next;
}
return current;
}
public static void main(String[] args) {
LinkList linkList = new LinkList();
linkList.insertFirst(21);
linkList.insertFirst(22);
linkList.insertFirst(23);
linkList.insertFirst(24);
linkList.insertFirst(25);
linkList.insertFirst(26);
linkList.insertFirst(27);
System.out.println("我们测试结果:");
linkList.display();
System.out.println("---查找-------------------------------------");
linkList.findByKey(25).display();
System.out.println("--删除first-------------------------------------");
//linkList.deleteFirst().display();
///linkList.deleteFirst().display();
//lEVnSCinkList.deleteFirst().display();
//linkList.deleteFirst().display();
System.out.println("-删除指定值---------------------------------------");
linkList.deleteByKey(27).display();
linkList.deleteByKey(21).display();
System.out.println("----------------------------------------");
linkList.display();
}
}
显示结果:
更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~