#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef struct Node {
int data;
struct Node* next;
} NODE, *PNODE;
PNODE creat_list(void);
void traverse_list(PNODE pHead);
bool is_empty(PNODE pHead);
int lenth_list(PNODE pHead);
bool insert_list(PNODE pHead, int pos, int val);
bool delete_list(PNODE pHead, int pos, int* pVal);
void sort_list(PNODE pHead);
int main() {
PNODE pHead = NULL;
pHead = creat_list();
traverse_list(pHead);
int lenth = lenth_list(pHead);
printf("链表节点:%d \n",lenth);
insert_list(pHead, 2, 30);
traverse_list(pHead);
return 0;
}
PNODE creat_list(void) {
int len;
int val;
printf("请输入你要生成节点个数\n");
scanf("%d", &len);
PNODE pHead = (PNODE)malloc(sizeof(NODE));
if (pHead == NULL) {
printf("分配失败,程序终止运行\n");
exit(-1);
}
PNODE pLow = pHead;
pHead->next = NULL;
for (int i = 0; i < len; i++) {
printf("请输入这个节点的值\n");
scanf("%d", &val);
PNODE pNew = (PNODE)malloc(sizeof(NODE));
if (pNew == NULL) {
printf("分配失败,程序终止运行\n");
exit(-1);
}
pNew->data = val;
pNew->next = NULL;
pLow->next = pNew;
pLow = pNew;
}
return pHead;
}
void traverse_list(PNODE pHead) {
PNODE p = pHead->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int lenth_list(PNODE pHead) {
int len = 0;
PNODE p = pHead->next;
while (p != NULL) {
len++;
p = p->next;
}
return len;
}
bool is_empty(PNODE pHead) {
if (pHead->next == NULL) {
return true;
}
return false;
}
void sort_list(PNODE pHead) {
int i, j, t;
PNODE p, q;
int len = lenth_list(pHead);
for (i = 0,p = pHead->next; i < len - 1; i++,p = p->next) {
for (j = i + 1, q = p->next; j < len; j++, q = q->next) {
if (p->data > q->data) {
t = p->data;
p->data = q->data;
q->data = t;
}
}
}
}
bool insert_list(PNODE pHead, int pos, int val) {
int i = 0;
PNODE p = pHead;
while (p != NULL && i < pos - 1) {
p = p->next;
i++;
}
if (pos-1 < i || p == NULL) return false;
PNODE pNew = (PNODE)malloc(sizeof(NODE));
if (NULL == pNew) {
printf("动态分配内存失败\n");
exit(-1);
}
pNew->data = val;
PNODE q = p->next;
p->next = pNew;
pNew->next = q;
return true;
}
bool delete_list(PNODE pHead, int pos, int* pVal) {
int i = 0;
PNODE p = pHead;
while (p->next != NULL && i < pos - 1) {
p = p->next;
i++;
}
if (pos - 1 < i || p->next == NULL) return false;
PNODE q = p->next;
*pVal = q->data;
p->next = p->next->next;
free(q);
q = NULL;
return true;
}