数据结构复习笔记-单链表
什么是单链表
单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。
构成
链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。
特点
- 链表是以节点的方式来储存数据的
- 每个节点包括data域,next指向下一个节点
- 在内存中各节点不一定连续存储
- 分为带头节点和不带头节点的链表
JAVA代码实现
对于一个单链表的节点,首先要有表示自己的节点属性,如value,name等,由于单链表的每个节点是指向自己的下一个节点,不可缺少的就是一个指向下一个节点的指针,所以对于一个单链表来说:
class ListNode{
public int val; // 自己的属性1
public String name;//自己的属性2
public ListNode next;//指向下一个节点
public ListNode(int val, String name) {
this.val = val;
this.name = name;
}
}
对于一个数据结构来说,增删改查操作和遍历方法是不可缺少的,单链表的操作主要是通过指针来完成,我们只需要链表的头节点,就可以对链表内所有的节点进行操作。
添加节点
单链表的添加操作:
1.用一个指针指向头节点
2.遍历到最后一个节点
3.将最后一个节点的next值指向这个新节点
代码:
public void add(ListNode node) {
//如果头节点为空,即当前链表无节点
if(head == null) {
head = node;
}else {
//找到当前链表的最后一个节点
ListNode temp = head;
while(temp.next != null) {
temp = temp.next;
}
temp.next = node;
}
}
删除节点
单链表的删除操作:
1.用一个指针指向头节点
2.遍历到最后一个节点
3.遍历中需要找到想要删除的节点的上一个节点,将它的next设置成想要删除的节点的后面一个节点
代码:
public void delete(int num) {
if(num < 1)throw new RuntimeException("非法输入");
//此方法删除的是单链表中的第num个的元素
ListNode temp = head;
if(num == 1) {
head = head.next; return;
}
while(temp.next != null) {
if(num - 1 == 1) {
if(temp.next!=null) {
temp.next = temp.next.next;
}
else temp.next = null;
return;
}
num--;
temp = temp.next;
}
System.out.print("Node not exist");
}
输出单链表的大小(节点个数)
1.用一个指针指向头节点
2.遍历到最后一个节点
3.每遍历一个节点,数字加1
代码:
public int size() {
ListNode temp = head;
int count = 0;
if(temp == null) {
return 0;
}
while(temp != null) {
temp = temp.next;
count++;
}
return count;
}
}