博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【记】链表概念与Java链表实现
阅读量:2134 次
发布时间:2019-04-30

本文共 5041 字,大约阅读时间需要 16 分钟。

文章目录

1.特点

链表是非常典型和常用的一种线性数据结构。它有以下几个特点:

  • 链表是以节点的方式来存储,是链式存储,有序线性表。
  • 每个节点包含 data 域, next 域:指向下一个节点.
  • 内存中链表的各个节点不一定是连续存储.
  • 链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定

图示

内存展示:

内存
逻辑展示:
逻辑

2.代码实现

package com.datastructure.linkedlist;import jdk.nashorn.internal.ir.BreakableNode;import jdk.nashorn.internal.ir.annotations.Ignore;import java.util.Stack;/** * @author Hacah * @date 2020/5/4 14:55 */public class SingleLinkedListDm {
public static void main(String[] args) {
SingleLinkedList singleLinkedList = new SingleLinkedList(); singleLinkedList.add(new Node(4, "aa", "aa")); singleLinkedList.add(new Node(5, "bb", "bb")); singleLinkedList.add(new Node(6, "bb", "bb")); //按照编号加入 singleLinkedList.addByOrder(new Node(1, "aa", "aa")); singleLinkedList.addByOrder(new Node(3, "aa", "aa")); singleLinkedList.addByOrder(new Node(2, "aa", "aa")); singleLinkedList.addByOrder(new Node(2, "aa", "aa")); //显示 singleLinkedList.list(); System.out.println(); //修改 singleLinkedList.update(new Node(2, "bb", "aa")); singleLinkedList.update(new Node(3, "cc", "aa")); singleLinkedList.update(new Node(1, "aaa", "aa")); //显示 singleLinkedList.list(); System.out.println(); //删除 singleLinkedList.delete(new Node(3, "cc", "aa")); //显示 singleLinkedList.list(); System.out.println(); }}class SingleLinkedList {
/** 初始化头结点 */ private Node head = new Node(0, "", ""); /** 定义尾指针 */ private Node tail = null; public Node getHead() {
return head; } /** * 尾部添加数据 * @param node */ public void add(Node node) {
Node temp = head; if (temp.next == null) {
temp.next = node; } else {
tail.next = node; } tail = node; } /** * 按no排序插入 */ public void addByOrder(Node node) {
Node temp = head; //是否有相同节点的编号的判断依据 boolean flag = false; while (true) {
if (temp.next == null) {
break; } if (temp.next.no > node.no) {
//在temp和temp.next之间插入 break; } else if (temp.next.no == node.no) {
//编号存在 flag = true; break; } temp = temp.next; } //判断 if (flag) {
System.out.println("数据编号已存在,无法添加"); } else {
node.next = temp.next; temp.next = node; } } /** * 根据节点的编号修改信息 * * @param node */ public void update(Node node) {
//判断是否为空 if (head.next == null) {
System.out.println("链表为空"); return; } Node temp = head; //是否查到该节点 boolean flag = false; while (true) {
//编号相同 if (temp.next.no == node.no) {
flag = true; break; } //到了链表的尾部 if (temp.next == null) {
break; } temp = temp.next; } if (flag) {
//把被修改节点的下一个节点用新结点指向 node.next = temp.next.next; //把被修改节点的下一个节点指定为空,释放资源 temp.next.next = null; //把被修改节点的前一个节点指向新节点 temp.next = node; } else {
//没有找到编号 System.out.println("没有这个编号,无法修改"); } } /** * 删除对应节点 * * @param node */ public void delete(Node node) {
//判断 if (head.next == null) {
System.out.println("链表为空,无法删除"); return; } Node temp = this.head; //是否查到该节点 boolean flag = false; while (true) {
if (temp.next.no == node.no) {
flag = true; break; } if (temp.next == null) {
break; } temp = temp.next; } if (flag) {
temp.next = temp.next.next; } else {
System.out.println("没有找到对应编号,无法删除"); } } /** * 遍历显示链表 */ public void list() {
//判断是否为空 if (head.next == null) {
System.out.println("链表为空"); return; } Node temp = head.next; while (true) {
if (temp == null) {
break; } System.out.println(temp); temp = temp.next; } }}/** 定义链表节点 */class Node {
/** 数据 */ public int no; public String name; public String nickname; /** 指向下一个节点的变量 */ public Node next; public Node(int no, String name, String nickname) {
this.no = no; this.name = name; this.nickname = nickname; } @Override public String toString() {
return "Node{" + "no=" + no + ", name='" + name + '\'' + ", nickname='" + nickname + '\'' + '}'; }}

转载地址:http://phugf.baihongyu.com/

你可能感兴趣的文章
博客文格式优化
查看>>
【托业】【新托业全真模拟】疑难语法题知识点总结(01~05)
查看>>
【SQL】group by 和order by 的区别。
查看>>
【Python】详解Python多线程Selenium跨浏览器测试
查看>>
Jmeter之参数化
查看>>
Shell 和Python的区别。
查看>>
Python 列表(list)、字典(dict)、字符串(string)常用基本操作小结
查看>>
Loadrunner之https协议录制回放报错如何解决?(九)
查看>>
python中xrange和range的异同
查看>>
列表、元组、集合、字典
查看>>
【Python】easygui小甲鱼
查看>>
【Python】关于Python多线程的一篇文章转载
查看>>
【Pyton】【小甲鱼】文件
查看>>
【Pyton】【小甲鱼】永久存储:腌制一缸美味的泡菜
查看>>
【Pyton】【小甲鱼】异常处理:你不可能总是对的
查看>>
APP性能测试工具
查看>>
【Pyton】【小甲鱼】类和对象
查看>>
压力测试工具JMeter入门教程
查看>>
作为一名软件测试工程师,需要具备哪些能力
查看>>
【Pyton】【小甲鱼】类和对象:一些相关的BIF(内置函数)
查看>>