#include <stdio.h>
#include <stdlib.h>
typedef struct LNode {
int data;
struct LNode* next;
}LNode,*LinkList;
//初始化(无头节点)
bool InitList_NH(LinkList& L) {
L = NULL;
return true;
}
//初始化(有头节点)
bool InitList_H(LinkList& L) {
L = (LNode*)malloc(sizeof(LNode));
if (L == NULL)
return false;
L->next = NULL;
return true;
}
//按位查找
LNode* GetElem(LinkList L, int i) {
if (i < 1) {
return NULL;
}
int j = 0;
LNode* p = L;
while (p != NULL && j < i ) {
p = p->next;
j++;
}
return p;
}
//按值查找
LNode* LocateElem(LinkList L, int e) {
LNode* p = L->next;
if (p == NULL) {
return NULL;
}
while (p != NULL && p->data != e) {
p = p->next;
}
return p;
}
int length(LinkList L) {
int len = 0;
if (L == NULL)
return 0;
LNode* p = L->next;
while (p != NULL) {
p = p->next;
len++;
}
return len;
}
LinkList ListTailInsert(LinkList& L) {
LNode* p, * t = L;
for (int i = 0; i < 5; i++) {
p = (LNode*)malloc(sizeof(LNode));
p->data = i;
t->next=p;
t = p;
}
p->next = NULL;
return L;
}
LinkList ListHeadInsert(LinkList L) {
LNode* p, * h = L;
for (int i = 0; i < 5; i++) {
p = (LNode*)malloc(sizeof(LNode));
p->data = i;
p->next = h->next;
h->next = p;
}
return L;
}
//链表的遍历
void print(LinkList L) {
LNode* p = L->next;
while (p != NULL) {
printf("The content is %d\n", p->data);
p = p->next;
}
}
int main() {
LinkList L1,L2;
if (InitList_H(L1)) {
printf("The List was initialized successfully\n");
}
else {
printf("List initialization failed\n");
}
if (InitList_H(L2)) {
printf("The List was initialized successfully\n");
}
else {
printf("List initialization failed\n");
}
ListTailInsert(L1);
printf("This is Tail Insert\n");
print(L1);
ListHeadInsert(L2);
printf("This is Head Insert\n");
print(L2);
int x;
printf("Enter the order you want to find\n");
scanf_s("%d", &x);
printf("The result is %d\n", GetElem(L1, x)->data);
printf("Enter the number you want to find\n");
scanf_s("%d", &x);
printf("The result is %d\n", LocateElem(L1, x)->data);
}