单链表插入带头结点和不带头结点
程序员文章站
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;
}