欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据结构——单链表(不带头结点)

程序员文章站 2024-03-21 14:49:16
...

以下单链表的操作为不带头结点的单链表,包含了 按位序插入、按位序删除、判空。

指定结点的前插、后插操作,查找,尾插法、头插法等操作均在单链表(带头结点)那一文章中:https://blog.csdn.net/qq_43489671/article/details/106722953

#include <iostream>
using namespace std;
typedef struct LNode {
	int data;		//数据域
	struct LNode* next;		//指向下一个结点
}LNode,* LinkList;
//初始化单链表
bool InitList(LinkList& L) {
	L = NULL;
	return true;
}
//按位序插入
bool ListInsert(LinkList& L, int i, int e) {
	if (i < 1)
		return false;
	if (i == 1) {
		LNode* s = (LNode*)malloc(sizeof(LNode));
		s->data = e;
		s->next = L;
		L = s;
		return true;
	}
	LNode* p = L;
	int j = 1;
	while (p != NULL && j < i - 1) {
		p = p->next;
		j++;
	}
	if (p == NULL)
		return false;
	LNode* s = (LNode*)malloc(sizeof(LNode));
	s->data = e;
	s->next = p->next;
	p->next = s;
	return true;
}
//按位序删除
bool ListDelete(LinkList& L, int i, int& e) {
	if (i < 1)
		return false;
	if (i == 1) {
		LNode* p = L;
		e = p->data;
		L = p->next;
		free(p);
		return true;
	}
	LNode* p = L;
	int j = 1;
	while (p != NULL && j < i - 1) {
		p = p->next;
		j++;
	}
	if (p == NULL)
		return false;
	if (p->next == NULL)
		return false;
	LNode* q = p->next;
	e = q->data;
	p->next = q->next;
	free(q);
	return true;
}
//判断单链表是否为空
bool Empty(LinkList L) {
	return (L == NULL);
}

 

相关标签: 笔记 数据结构