zaiwo2014

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
统计
 

一、单链表

什么是链表

链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针连接次序实现的。

每一个链表都包含多个节点,节点又包含两个部分,一个是数据域(储存节点含有的信息),一个是引用域(储存下一个节点或者上一个节点的地址)。

链表的特点是什么

不指定大小,扩展方便。链表大小不用定义,数据随意增删。
内存中非连续,内存利用率高
获取数据麻烦,需要遍历查找,比数组慢
方便插入、删除

二、双向链表

在单链表的基础上加上一个指向前驱节点的指针,实现双向访问

 

单链表的实现:

线性表节点定义:

1 public class Node<List> {
2     List data;
3     Node next; //下一节点指针
4     public Node(int data){
5         this.data = data;
6     }
7 }

 

功能的实现:

1.遍历:

复制代码
 1     public void query(){
 2         if(head.next == null){
 3             System.out.println("空表");
 4             return;
 5         }
 6         //建立一个辅助节点来遍历单链表
 7         Node temp = head.next;
 8         while (temp != null){
 9             System.out.println(temp.data);
10             temp = temp.next; //移动temp下标
11         }
12     }
复制代码

 

2.增加节点

复制代码
 1     public void add(Node newNode) {
 2         //默认添加到双向链表的最后
 3         Node temp = head;
 4         while(true){
 5             if(temp.next == null){
 6                 break;
 7             }
 8             temp = temp.next;
 9         }
10         temp.next = newNode;
11     }
复制代码

 

3.删除节点

 

关于temp节点:

  在增删节点的时候,temp应该直接指向head节点,而不应该指向head.next

  如:

复制代码
 1     public void add(Node newNode) {
 2         //默认添加到双向链表的最后
 3         Node temp = head.next;
 4         while(true){
 5             if(temp == null){
 6                 break;
 7             }
 8             temp = temp.next;
 9         }
10         temp = newNode;
11     }
复制代码

  会导致节点添加失败!

posted on   zaiwo2014  阅读(47)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
 
点击右上角即可分享
微信分享提示