单链表的基本操作和例题(C/C++)
基础操作
typedef int ElemType;
typedef struct node {
ElemType data;
struct node* next;
}Node, LinkList;
void CreateLinkList(LinkList*& L) {
L = (LinkList*)malloc(sizeof(LinkList));
L->next = NULL;
}
void HeadInsert(LinkList* L, ElemType e) {
Node* n = (Node*)malloc(sizeof(Node));
Node* p;
n->data = e;
if (L->next == NULL) {
n->next = L->next;
L->next = n;
}
else {
p = L->next;
L->next = n;
n->next = p;
}
}
void RearInsert(LinkList* L, ElemType e) {
Node* n = (Node*)malloc(sizeof(Node)), *p;
n->data = e;
if (L->next == NULL) {
n->next = L->next;
L->next = n;
}
else {
p = L->next;
while (p->next != NULL) {
p = p->next;
}
n->next = p->next;
p->next = n;
}
}
void CreateListHead(LinkList *&L, ElemType elements[], int size) {
int i = 0;
L = (LinkList*)malloc(sizeof(LinkList));
L->next = NULL;
Node* p = NULL;
for (; i < size; i++) {
p = (LinkList*)malloc(sizeof(LinkList));
p->data = elements[i];
p->next = L->next;
L->next = p;
}
}
void CreateListRear(LinkList*& L, ElemType elements[], int size) {
L = (LinkList*)malloc(sizeof(LinkList));
L->next = NULL;
Node* p, *s;
s = L;
int i = 0;
for (; i < size; i++) {
p = (LinkList*)malloc(sizeof(LinkList));
p->next = s->next;
p->data = elements[i];
s->next = p;
s = s->next;
}
}
void TraversalList(LinkList* L) {
LinkList* p = L->next;
while (p != NULL) {
printf("%d", p->data);
p = p->next;
}
}
void DeleteMaxNode(LinkList* L) {
Node* pre = L, * p = L->next, * maxPre = pre, * maxP = p;
while (p != NULL) {
if (maxP->data < p->data) {
maxP = p;
maxPre = pre;
}
pre = p;
p = p->next;
}
maxPre->next = maxP->next;
free(maxP);
}
void Sort(LinkList* L) {
LinkList* pre, * p, * q;
p = L->next->next;
L->next->next = NULL;
while (p != NULL) {
q = p->next;
pre = L;
while (pre->next != NULL && pre->next->data < p->data) {
pre = pre->next;
}
p->next = pre->next;
pre->next = p;
p = q;
}
}
void Reverse(LinkList *L) {
LinkList* p = L->next;
L->next = NULL;
while (p != NULL) {
HeadInsert(L, p->data);
p = p->next;
}
}
void SplitList(LinkList* &L, LinkList*& L1, LinkList*& L2) {
LinkList* p = L->next, * q, * r1;
L1 = L;
r1 = L1;
L2 = (LinkList*)malloc(sizeof(LinkList));
L2->next = NULL;
while (p != NULL) {
r1->next = p;
r1 = p;
p = p->next;
q = p->next;
p->next = L2->next;
L2->next = p;
p = q;
}
r1->next = NULL;
}