#include<stdio.h>
#include<stdlib.h>
#define ElemType int
typedef struct LNode{
ElemType data;
LNode *next;
}LNode, *Linklist;
bool init(Linklist &linklist) {
linklist->next = NULL;
return true;
}
// 头插法
bool list_headInsert(Linklist &linklist, ElemType data) {
LNode *tem_node = (LNode*)malloc(sizeof(LNode));
tem_node->data = data;
tem_node -> next = linklist -> next;
linklist -> next = tem_node;
return true;
}
// 尾插法
bool list_botmInsert(Linklist &linklist, ElemType data) {
LNode *tem_node = (LNode*)malloc(sizeof(LNode));
tem_node->data = data;
tem_node->next = NULL;
LNode *temp = linklist->next;
while(temp->next != NULL) temp = temp->next;
temp->next = tem_node;
return true;
}
void output(Linklist &linklist) {
LNode *temp = linklist -> next;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
// 从第一个元素开始索引,index不得小于1
ElemType getDataByIndex(Linklist &linklist, int index) {
LNode *tem_node = linklist->next;
if (index < 1) return -1;
while(--index) {
if (tem_node -> next == NULL) return -1;
tem_node = tem_node->next;
}
return tem_node->data;
}
// 删除第i个元素
bool delDataByIndex(Linklist &linklist, int index){
LNode *tem_node = linklist;
if (index < 1) return false;
while(--index) {
if (tem_node -> next == NULL) return false;
tem_node = tem_node->next;
}
LNode *tem_free = tem_node->next;
tem_node -> next = tem_node->next->next;
free(tem_free);
return true;
}
// 访问第index个元素
bool addDataByIndex(Linklist &linklist, ElemType data, int index){
LNode *new_node = (LNode*)malloc(sizeof(LNode));
new_node -> next = NULL;
new_node -> data = data;
LNode *tem_node = linklist;
while(--index) {
if (tem_node -> next == NULL) return false;
tem_node = tem_node->next;
}
new_node -> next = tem_node -> next;
tem_node -> next = new_node;
return true;
}
// 获取表长(不算头节点)
int getLength(Linklist &linklist){
LNode *tem_node = linklist;
int length = 0;
while(tem_node -> next != NULL) {
length ++;
tem_node = tem_node -> next;
}
return length;
}
int main(){
Linklist linklist;
init(linklist);
list_headInsert(linklist, 1);
list_headInsert(linklist, 2);
list_headInsert(linklist, 3);
list_headInsert(linklist, 4);
list_botmInsert(linklist, 5);
list_botmInsert(linklist, 6);
list_botmInsert(linklist, 7);
printf("完成链表的初始值的插入:");
output(linklist);
printf("查询索引为3的数:%d\n", getDataByIndex(linklist, 3));
printf("删除第二的节点,函数返回值:%d\n", delDataByIndex(linklist, 2));
printf("删除第二个节点后的链表:");
output(linklist);
addDataByIndex(linklist, 100, 2);
printf("增加元素后的链表:");
output(linklist);
printf("此时链表长度:%d\n",getLength(linklist));
return 0;
}
输出:
完成链表的初始值的插入:4 3 2 1 5 6 7
查询索引为3的数:2
删除第二的节点,函数返回值:1
删除第二个节点后的链表:4 2 1 5 6 7
增加元素后的链表:4 100 2 1 5 6 7
此时链表长度:7