最近开始在学习数据结构,今天重新写了一次链表的,感觉又有些收获,先写下来啦。
这一次首先是写了个接口,再用一个类来实现对链表的操作。
节点的
public class Node { private Node head; private Node next; private String data; private Node newEntry; /** * 重写构造函数,在添加节点时用 * @param newEntry */ public Node(Node newEntry){ this.newEntry=newEntry; } /** * 系统默认的构造函数 */ public Node(){ } /** * 存储当前节点的方法 * @param next */ public void setNext(Node next){ this.next=next; } /** * 获取当前节点的方法 * @return Next */ public Node getNext(){ return next; } /** * 存储节点的数据的方法 * @param data节点的数据 */ public void setData(String data){ this.data=data; } /** * 获取节点数据的方法 * @return data节点的数据 */ public String getData(){ return data; }
接口的代码~
/** * 定义一个接口,用来规范链表的操作方法 * @author Lucia 2013.4.7 * */ public interface Operation { /** * Task:在链表中添加元素,默认添加在最后一个 * @param newEntry新加入的元素 */ public void add(Node newEntry); /** * Task:在链表的任意位置加入元素 * @param newEntry加入元素 * @param position加入元素要插入的位置 */ public void add(Node newEntry,int position); /** * Task:删除链表中任意位置的元素 * @param position传入指定位置 * @return Node返回删除的节点 */ public Node remove(int position); /** * Task:查找表中temp节点的位置 * @param 要查找的节点temp * @return int temp节点的位置 */ public String select(Node temp); /** * 清除所有的元素 */ public void clear(); }
队尾添加
/** * 实现在链尾添加元素的方法 */ public void add(Node newEntry) { Node node1 = new Node(newEntry); if(head!=null){ last.setNext(node1); last=last.getNext(); } else{ head=newEntry; last=head; } count++; }
任意添加(此处有些问题,正在改进中,不是每次添加都是对的)
/** * 实现在任意位置添加元素的方法 */ public void add(Node newEntry, int position) { Node newNode=new Node(newEntry); Node temp=new Node(); if(count>=position&&position!=0){ temp=head; //找到所找节点的上一个节点 for(int i=0;i<position-1;i++){ temp=temp.getNext(); } newNode.setNext(temp.getNext()); temp.setNext(null); temp.setNext(newEntry); count++; } else if(position==0){ temp.setNext(head.getNext()); newNode.setNext(temp); } else if(count<position){ System.out.println("您所输入的序号超出链长,输入错误!"); } }
删除元素的方法,一开始是没有把删除头节点的特殊情况单独例出来,就有的情况不对,后来单独写了头节点的情况后,就OK啦~
/** * 实现删除元素的方法 */ public Node remove(int position) { //分三种情况,删除中间元素 if(count>=position&&position!=0){ Node temp=new Node(); temp=head; //找到所找节点的上一个节点 for(int i=0;i<position-1;i++){ temp=temp.getNext(); } System.out.println("您所删除的元素是"+temp.getNext().getData()); temp.setNext(temp.getNext().getNext()); } //删除第一个元素 else if(position==0){ System.out.println("您所删除的元素是"+head.getData()); head=head.getNext(); } //删除超出范围 else if(count<position){ System.out.println("您所输入的序号超出链长,输入错误!"); } return null; }
查找元素的方法
/** * 实现查找元素的方法 */ public String select(Node temp) { Node node = new Node(); node=head; String data = null; for(int i=0;i<count-1;i++){ if(node.getData().equals(temp.getData())){ data="要查找的数据是:"+node.getData()+",数据的序号是"+(i+1); System.out.println(data); break; } node=node.getNext(); } return data; }
打印链表的方法
/** * 打印链表的方法 */ public void print(){ if(head!=null){ Node temp = new Node(); temp=head; for(int i=0;i<count;i++){ System.out.println("数据是"+temp.getData()); temp=temp.getNext(); } } else{ System.out.println("链表不存在!!!"); } }
最终的输出是
这次的链表实现是没有专门设置为空的头节点的,打算之后再实现一下~
相关推荐
数组和链表总结 数组和链表.txt
链表是学习数据结构的大门,在微软等大公司招聘c\c++技术人员的时候有3个会必然出现 的东西,指针、链表、二叉树!
c语言中链表的学习,总结相当到位,对于初学者有很大的帮助!
链表总结,c语言版本,巩固基础知识,适用于求职面试,来自互联网,版权归著者
链表是最基本的数据结构,凡是学计算机的必须的掌握的,在面试的时候经常被问到,关于链表的实现,百度一下就知道了。 在此总结一下与链表相关的练习题。题目很全,好好消化。
java 链表心得,对于感到困难的朋友会有很大帮助,与其他语言互通
做有关链表的编程时,这个很实用! 不信试试! 我个人是觉得在做有关链表的程序时,是很好用的
数据结构,链表所有综合面试题型汇总,有大神漏缺的给我留言
C语言中关于链表的总结内容,内附代码例题,详细的有条理的讲解链表内容
php数组当链表-php数组和链表的区别总结 数组和链表.pdf
面试题总结:数组和链表的区别 数组和链表.pdf
城市链表课程设计里面含有详细文档,以及实现代码,资源完整。
多种方法实现链表的逆置。 c语言编写,可以任意字符输入。
1. 剑指offer 22.返回倒数第k个节点:林伟龙 【20:15-20:34】法思路1. 遍历第次链表计算链表度2. 遍历第次链表找到 第 k 个 元素法
php数组和链表的区别总结 数组和链表.pdf
数组和链表的对比分析 数组和链表.docx
顺序存储和链式存储 1 数组—顺序存储 1 链表—链式存储 2 链表概述 3 单链表 4 单链表概念和简单的设计 4 链表的初始化 5 头插入法创建单链表 6 尾插入法创建单链表 7 遍历单链表如打印、修改 8 ...关于链表的总结 23
数据结构的实验报告2链表的基本操作运算 实验内容 编写程序实现链表的建立和基本运算,并完成以下功能: 1、初始化链表、建立新链表。 2、查找节点。 3、 删除节点。 4、 插入节点。 5、 获得链表长度。 6、 退出。
动态链表,处理动态链表的函数,对动态链表的操作,对链表的插入操作(insert)等等
数组和链表的区别和优缺点总结 数组和链表.pdf