zaiwo2014

导航

 

一、单链表

什么是链表

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

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

链表的特点是什么

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

二、双向链表

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

 

单链表的实现:

线性表节点定义:

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 2022-04-19 23:06  zaiwo2014  阅读(61)  评论(0)    收藏  举报