链表的全部操作——创建、插入、查找、删除、计算长度
来源:互联网 发布:女生身高多少最好知乎 编辑:程序博客网 时间:2024/06/15 01:58
1、链表结果应包含两个部分: 数据部分(该节点的数据) + 地址部分(下一个节点的地址)
2、一般定义一个head头引用变量,方便操作。
3、基本操作:
->追加节点:在链表尾部add一个新的节点,
->头插节点:在链表头部add一个新的节点。
->查找节点:一般是通过节点的data或者是key来一一对比查找。
->插入节点:在中间的指定位置add一个新的节点。
->删除节点:删除指定位置的节点。
->计算链表长度:链表在物理上的不连续,导致链表长度需要遍历所有节点后才能得到。
->打印所有节点:方便查看各项操作的结果,故将打印操作单独列为一个方法。
import java.util.Scanner;/** * @author LilyLee * @date 2017年4月24日 * @time 下午10:28:57 * @Version 1.0 * @email lilylee_1213@foxmail.com * */class DATA1{ //数据部分String key;String name;int age;}class CLType{ //定义链表的所有操作DATA1 nodeData=new DATA1();CLType nextNode; //保存next的地址,很重要//public CLType(){};CLType CLAddEnd(CLType head,DATA1 nodeData){ //在链表的末尾追加节点CLType node,temp;if((node=new CLType())==null){return null;} //申请内存失败,返回。else{node.nodeData=nodeData;node.nextNode=null;if(head==null){head=node;return node;}temp=head;while(temp.nextNode!=null){//循环链表,查找到链表的尾部temp=temp.nextNode;}temp.nextNode=node;return head;}}CLType CLAddFirst(CLType head,DATA1 nodeData){//头插数据CLType node;if((node=new CLType())==null){return null;} //申请内存失败,返回。else{node.nodeData=nodeData;node.nextNode=head;head=node;return head;}}CLType CLFindNode(CLType head,String key){ //这里通过关键字key来查找节点CLType temp;temp=head;while(temp!=null){ //从头开始遍历链表if(temp.nodeData.key.equals(key)){return temp;}temp=temp.nextNode; //if 不满足的时候,继续找下一个节点}return null;}CLType CLInsertNode(CLType head,String findkey,DATA1 nodeData){//insert 插入节点CLType node, temp;if((node=new CLType())==null){return null;} //申请内存失败,返回。node.nodeData=nodeData;temp=CLFindNode(head,findkey); //找到需要插入的位置if(temp!=null){node.nextNode=temp.nextNode;temp.nextNode=node;}else{System.out.println("no found!");}return head;}int CLDeleteNode(CLType head,String key){ //删除指定位置的节点CLType node,temp;temp=head;node=head;while(temp!=null){if(temp.nodeData.key.equals(key)){ //找到删除位置node.nextNode=temp.nextNode;return 1;}else{node=temp;temp=temp.nextNode;}}return 0;}int CLLength(CLType head){ //计算链表的长度CLType temp;int Len=0;temp=head;while(temp!=null){Len++;temp=temp.nextNode;}return Len;}void CLAllNode(CLType head){ //遍历链表CLType temp;temp=head;while(temp!=null){System.out.println(temp.nodeData.key+" "+temp.nodeData.name+" "+temp.nodeData.age);temp=temp.nextNode;}}}public class LinkedList {public static void main(String[] args) {CLType node,head=null;CLType c=new CLType();String findkey,key="1";Scanner sc=new Scanner(System.in);System.out.println("input key name age,endwith 0 ");while(true){DATA1 nodeData=new DATA1();nodeData.key=sc.next();if(nodeData.key.equals("0")){break;}nodeData.name=sc.next();nodeData.age=sc.nextInt();head=c.CLAddEnd(head, nodeData);//在尾部添加节点}c.CLAllNode(head);//打印所有节点System.out.println("input Insert key");findkey=sc.next();System.out.println("input node data (key name age)");DATA1 nodeData=new DATA1();nodeData.key=sc.next();nodeData.name=sc.next();nodeData.age=sc.nextInt();head=c.CLInsertNode(head, findkey, nodeData);c.CLAllNode(head);System.out.println("input delete key");key=sc.next();c.CLDeleteNode(head, key);c.CLAllNode(head);System.out.println("input find key");key=sc.next();node=c.CLFindNode(head, key);if(node!=null){nodeData=node.nodeData;System.out.println(nodeData.key+nodeData.name+nodeData.age);}else{System.out.println("no found");}}}
0 0
- 链表的全部操作——创建、插入、查找、删除、计算长度
- 单向链表的操作:创建,删除,插入,销毁,查找
- list 基本操作 1 -- 创建,插入,删除,计算长度
- 链表的创建 查找 排序 插入 删除 逆序 长度 显示
- 链表操作:创建,插入,删除,查找等功能
- 数据结构之链表操作,创建,插入,删除,查找。
- C++链表的创建、插入、删除、查找、合并、排序、修改等操作的实现
- C语言实现带头结点的链表的创建、查找、插入、删除操作
- 链表的创建、插入、删除操作
- 链表的创建、插入、删除操作
- C语言链表的创建、插入、查找、删除、清空操作
- 链表——创建、插入、删除、查找
- 单链表的创建、插入,删除、查找等操作
- 双链表的各种操作 创建 插入 删除 查找
- 哈希表的常用操作:创建、插入、查找、删除
- Linked List的基本操作(创建/删除/插入/查找)
- 单链表基本操作的实现--创建、插入、查找、删除
- 线性表的基本操作,包括:创建、插入、删除、查找等基本操作
- CentOS7安装MariaDB10.X
- CUDA大津阈值—原子加统计直方图&规约求最大值索引
- TabIndex
- java基础入门-poi解析excel
- 利用桥接模式如何在局域网里远程连接CentOS(VMWare虚拟机)
- 链表的全部操作——创建、插入、查找、删除、计算长度
- Hadoop配置Yarn
- Java反射知识
- Hadoop配置PATH环境变量
- Java琐碎小知识(二)
- MRI影像学习笔记(一)
- Ubuntu16.04之Hadoop2.7.3集群安装配置教程
- 中南大学第十一届大学生程序设计竞赛-COJ1895-Apache is late again
- 【深入理解JVM】第10~13章 编译期优化、线程安全、锁优化 笔记