数据结构:单向链表的增删改查

本文介绍了单向链表的基本概念和结构,重点解析了单向链表的增删改查操作,包括有序、无序、重复和不重复情况的处理。此外,还提及了双向链表的定义,它允许更方便地访问前后结点。
摘要由CSDN通过智能技术生成

单向链表

定义:单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始;链表是使用指针进行构造的列表;又称为结点列表,因为链表是由一个个结点组装起来的;其中每个结点都有引用指向列表中的下一个结点;

结构图:
在这里插入图片描述

上图可以看出结构了,即每一个节点的Next变量,都指向了下一个节点,而最后一个节点指向了null

数据结构:

package LinkListTest;

public class LinkList {
	
	private Integer date;
	private LinkList next;
	
	public Integer getDate() {
		return date;
	}
	public void setDate(Integer date) {
		this.date = date;
	}
	public LinkList getNext() {
		return next;
	}
	public void setNext(LinkList next) {
		this.next = next;
	}
	
	@Override
	public String toString() {
		return "LinkList [date=" + date + ", next=" + next + "]";
	}

}

其中第一个是链表存储的值(用Integer类型可以直接判断该该值是否为null,如果是int类型,由由于int类型是基本类型,不能这样判断),而第二个和链表类型一样的变量next是只想下一个节点的引用

单向链表的增删改查(包含有序、无序、重复和不重复)

package linklisttest;

public class NodeTest {
	
	public static Node node = new Node();	//全局变量链表头节点
	
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		int[] arr = {4,5,9,6,3,1,7};
		for
单向链表是一种线性的数据结构,每个节点包含数据和指向下一个节点的指针。以下是C语言中对单向链表进行增删改查的基本操作示例: ```c // 定义链表节点结构体 typedef struct Node { int data; // 节点的数据 struct Node* next; // 指向下一个节点的指针 } Node; // 创建新节点函数 Node* createNode(int value) { Node* newNode = (Node*)malloc(sizeof(Node)); newNode->data = value; newNode->next = NULL; return newNode; } // 插入节点到链表头部 void insertAtStart(Node** head, int value) { Node* newNode = createNode(value); newNode->next = *head; *head = newNode; } // 插入节点到指定位置 void insertAfter(Node* current, int value) { if (current == NULL) { printf("Current node is null.\n"); return; } Node* newNode = createNode(value); newNode->next = current->next; current->next = newNode; } // 删除节点 void deleteNode(Node** head, int key) { Node* temp = *head, *prev = NULL; if (temp != NULL && temp->data == key) { *head = temp->next; free(temp); return; } while (temp != NULL && temp->data != key) { prev = temp; temp = temp->next; } if (temp == NULL) { printf("Element not found in the list.\n"); return; } prev->next = temp->next; free(temp); } // 查找节点 Node* findNode(Node* head, int key) { Node* current = head; while (current != NULL) { if (current->data == key) return current; current = current->next; } return NULL; } // 打印链表 void printList(Node* head) { Node* temp = head; while (temp != NULL) { printf("%d -> ", temp->data); temp = temp->next; } printf("NULL\n"); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值