链表是有序的列表。

小结:

1.链表是以节点的方式来存储

2.每个节点包含data域,next域:指向下一个节点

3.链表的各个节点不一定是连续存储

单向链表

head节点:

1.不存放具体数据

2.作用就是表示单链表头next

节点类:

//定义一个节点类
class Node{int item;Node next;//指向下一个节点public Node(int item, Node next) {super();this.item = item;this.next = next;}public Node(int item) {super();this.item = item;}public Node() {super();}@Overridepublic String toString() {return "Node [item=" + item + "]";}}

创建单向链表(添加):

1.先创建一个head头节点,作用就是表示单链表的头

//先创建一个头节点,不存放具体数据Node head = new Node(0, null);

2.后面添加每一个节点,就直接加入到链表的最后

//向链表尾添加数据public void add(Node newNode) {if(head.next == null) {head.next = newNode;return;}Node temp = head;while(temp.next != null) {//找到链表的最后temp = temp.next;}temp.next = newNode;}

遍历单项链表:

1.通过一个辅助指针遍历整个链表

//遍历public void printList() {Node temp = head.next;while(temp != null) {System.out.println(temp);temp = temp.next;}}

按照某个属性的顺序添加新的节点(newNode):

1.定义一个辅助指针(temp)指向新节点位置的前一个节点,找到新添加节点(newNode)的位置,定义boolean的flag默认值=false,如果找到false=true

2.newNode.next = temp.next;

3.temp.next = newNode;

//按照顺序添加数据public void addByOrder(Node newNode) {if(head.next == null) {head.next = newNode;return;}Node temp = head.next;boolean flag = false;while(true) {if(temp.next != null) {if(temp.next.item > newNode.item ) {break;}else if(temp.next.item == newNode.item){flag = true;}}else {break;}temp = temp.next;}if(flag) {System.out.println("已经存在不能添加");}else {if(temp.next == null) {temp.next = newNode;}else {newNode.next = temp.next;temp.next = newNode;}}}

修改单向链表的某一节点(还需判断链表是否为空):

1.定义一个辅助指针(temp)指向需要修改的节点位置,定义boolean的flag默认值=false,如果找到false=true

2.this.属性 = 属性

//修改链表public void updata(int item,int newItem) {if(head.next == null) {System.out.println("链表为空,不能修改");return;}Node temp = head.next;boolean flag = false;while(true) {if(temp.item == item) {flag = true;temp.item = newItem;break;}temp = temp.next;}if(flag) {System.out.println("修改成功!!!");}else {System.out.println("没有找到该节点");}}

删除单向链表的节点:

1.定义一个辅助指针(temp)指向需要删除的节点位置的前一个节点的位置,定义boolean的flag默认值=false,如果找到false=true

2.temp.next = temp.next.next;

//删除链表public void del(int item) {Node temp = head;boolean flag = false;if(head.next == null) {System.out.println("该链表为空,无法删除");}while(true) {if(temp.next.item == item) {flag = true;temp.next = temp.next.next;break;}if(temp.next == null) {break;}temp = temp.next;}if(flag) {System.out.println("删除成功");}else {System.out.println("没有找到此节点");}}

总代码:

class SingleList{//先创建一个头节点,不存放具体数据Node head = new Node(0, null);//向链表尾添加数据public void add(Node newNode) {if(head.next == null) {head.next = newNode;return;}Node temp = head;while(temp.next != null) {//找到链表的最后temp = temp.next;}temp.next = newNode;}//按照顺序添加数据public void addByOrder(Node newNode) {if(head.next == null) {head.next = newNode;return;}Node temp = head.next;boolean flag = false;while(true) {if(temp.next != null) {if(temp.next.item > newNode.item ) {break;}else if(temp.next.item == newNode.item){flag = true;}}else {break;}temp = temp.next;}if(flag) {System.out.println("已经存在不能添加");}else {if(temp.next == null) {temp.next = newNode;}else {newNode.next = temp.next;temp.next = newNode;}}}//修改链表public void updata(int item,int newItem) {if(head.next == null) {System.out.println("链表为空,不能修改");return;}Node temp = head.next;boolean flag = false;while(true) {if(temp.item == item) {flag = true;temp.item = newItem;break;}temp = temp.next;}if(flag) {System.out.println("修改成功!!!");}else {System.out.println("没有找到该节点");}}//删除链表public void del(int item) {Node temp = head;boolean flag = false;if(head.next == null) {System.out.println("该链表为空,无法删除");}while(true) {if(temp.next.item == item) {flag = true;temp.next = temp.next.next;break;}if(temp.next == null) {break;}temp = temp.next;}if(flag) {System.out.println("删除成功");}else {System.out.println("没有找到此节点");}}//遍历public void printList() {Node temp = head.next;while(temp != null) {System.out.println(temp);temp = temp.next;}}
}//定义一个节点类
class Node{int item;Node next;//指向下一个节点public Node(int item, Node next) {super();this.item = item;this.next = next;}public Node(int item) {super();this.item = item;}public Node() {super();}@Overridepublic String toString() {return "Node [item=" + item + "]";}}

单向链表(SingleList)相关推荐

  1. python单向链表和双向链表的图示代码说明

    图示说明: 单向链表: insert. remove. update.pop方法 class Node:def __init__(self, data):self.data = dataself.ne ...

  2. 二维指针删除单向链表

    Linus slashdot:    https://meta.slashdot.org/story/12/10/11/0030249 原文: https://coolshell.cn/article ...

  3. 【C++】【三】单向链表

    // 单向链表.cpp : 此文件包含 "main" 函数.程序执行将在此处开始并结束. //#include <iostream> #include<stdli ...

  4. 基础数据结构【二】————动态数组,单向链表及链表的反转

    DEMO1:     动态分配变量(链表,而静态数组是线性表,意味着动态数组访问和遍历复杂度为O(n),而插入和删除复杂度为O(1),而静态数组线性表则完全相反) int* intptr = new ...

  5. python数据结构与算法:单向链表

    单链表:python实现及其对应的 增删查检 操作 ##################### P4.1-P4.8 单向链表 ########################### #coding:u ...

  6. C语言单向链表的实现

    一个简单结点的结构体表示为: struct note { int  data:              /*数据成员可以是多个不同类型的数据*/ struct  note  *next:      ...

  7. C++11中std::forward_list单向链表的使用

    std::forward_list是在C++11中引入的单向链表或叫正向列表.forward_list具有插入.删除表项速度快.消耗内存空间少的特点,但只能向前遍历.与其它序列容器(array.vec ...

  8. 单向链表JAVA代码

    //单向链表类 publicclassLinkList{       //结点类     publicclassNode{         publicObject data;         pub ...

  9. 链表问题8——将单向链表按某值划分成左边小、中间相等、右边大的形式(进阶)

    题目 给定一个单向链表头节点head,和一个整数pivot. 实现一个调整链表的函数,将链表调整为左部分小于pivot,中间等于,右边大于pivot的.调整后的节点顺序要保持与原链表中节点的先后次序一 ...

最新文章

  1. 干货!这里有一份神经网络入门指导,请收下!
  2. Java两个列表根据属性去重_java8 如何对list操作 根据某一个字段进行判断去重对另一个字段进行累加 最终返回list?...
  3. GAN生成对抗网络-CGAN原理与基本实现-条件生成对抗网络04
  4. spring实现IOC的思路和方法
  5. 对联系人进行增删改查
  6. [读书笔记][golang]《go语言-云动力》
  7. din算法 代码_DIN算法代码详细解读
  8. 全攻略:大病医疗专项附加扣除,一文集全了
  9. centos7安装docker 以及简单使用
  10. yacc c语言语法分析器,GitHub - waxnkw/yacc: 简陋版语法分析器
  11. springboot集成quartz,简版-通俗易懂
  12. php视频弹幕,php超仿bilbili播放器带弹幕库后台管理系统
  13. 军棋java_军棋规则及走法
  14. TeamViewer远程控制
  15. 茅台抢购脚本golang版本使用教程
  16. jQuery Color Animate (jQuery 颜色变换动画) 插件
  17. IDEA 2018.3版本Spring Boot 热部署
  18. 云服务器中的mac地址是什么?
  19. 转:详尽的变速器调节方法
  20. python matplotlib绘制折线图_Matplotlib实践系列:折线图完全示例

热门文章

  1. mysql填写账户远程_为 mysql 添加远程连接账户
  2. 什么是DNS劫持与DNS劫持常见手段总结
  3. 语音合成论文优选:音素韵律控制Prosodic Clustering for Phoneme-level Prosody Control in End-to-End Speech Synthesis
  4. 仅用一台电脑如何同时打开多个平台、登录多个账号?
  5. 计算机等级节日综合症,节日美食综合症
  6. Apple Watch 4心电图功能扩展至23个国家和地区 有中国香港
  7. fisco bcos 智能合约开发
  8. 简介智能合约开发框架-Hardhat
  9. BJDCTF 2nd--Real_EasyBaBa
  10. [转]检查本地DNS服务器是否正常工作及解决方法