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

单链表插入带头结点和不带头结点

程序员文章站 2024-03-21 13:10:16
...
#include <iostream>
using namespace std;
// 单链表带头结点
typedef int ElemType;
typedef struct LNode {
	ElemType data;
	struct LNode *next;
}LNoded, *LinkList;

// 单链表带头结点插入操作
bool ListInsert(LinkList &L, int i, ElemType e) {
	// 如果是小于等于1插入失败
	if (i < 1) {
		return false;
	}
	LNode *p;
	int j = 0;
	p = L;
	// 寻找前一个结点p
	while (p != NULL && j < i - 1) {
		p = p->next;
		j++;
	}
	// 开始插入操作
	LinkList s = (LNode *)malloc(sizeof(LNode));
	s->data = e;
	s->next = p->next;
	p->next = s;
	return true;
}

// 单链表不带头结点的插入操作需要对第一个结点特殊操作
bool ListInsertOne(LinkList &L, int i, ElemType e) {
	if (i == 1) {
		// 申请一个结点
		LinkList s = (LNode *)malloc(sizeof(LNode));
		L->data = e;
		s->next = L;
		L = s;
		return true;
	}
	LNode *p;
	int j = 1;
	p = L;
	// 寻找前一个结点p
	while (p != NULL && j < i - 1) {
		p = p->next;
		j++;
	}
	// 开始插入操作
	LinkList s = (LNode *)malloc(sizeof(LNode));
	s->data = e;
	s->next = p->next;
	p->next = s;
	return true;

}