一、链表的基本操作
1.初始化
void initLink(){
Link* head = (Link*)malloc(sizeof(Link));
head->val = 0;
head->next = NULL;
Link* p = head;
for(int i = 0; i < 5; i++){
Link* temp = (Link*)malloc(sizeof(Link));
temp->val = i;
temp->next = NULL;
p->next = temp;
p = p->next;
}
}
2.显示
void displayLink(Link* head){
Link* p = head->next;
while(p != NULL){
printf("%d ", p->val);
p = p->next;
}
puts("\r\n");
}
3.插入节点
void insertLink(Link* head, int address, int val){
int find = 0;
Link* p = head;
if(address == 1) {
Link* temp = (Link*)malloc(sizeof(Link));
temp->val = val;
temp->next = p->next;
p->next = temp;
find = 1;
puts("插入成功!\n");
}
else{
while(p != NULL){
if(address == 0){
Link* temp = (Link*)malloc(sizeof(Link));
temp->val = val;
temp->next = p->next;
p->next = temp;
find = 1;
puts("插入成功!\n");
break;
}
address--;
p = p->next;
}
}
if(find == 0)
puts("插入位置有误,请检查!\r\n");
}
4.删除节点
void delLink(Link* head, int val){
Link* p = head;
int find = 0;
while(p->next != NULL){
if(p->next->val == val){
p->next = p->next->next;
find = 1;
puts("删除成功\n");
break;
}
p = p->next;
}
if(find == 0)
puts("未找到目标节点,请检查!\n");
}
5.更改节点值
void modifedVal(Link* head, int address, int val){
Link* p = head;
int find = 0;
while(p != NULL){
if(address == 0){
p->val = val;
find = 1;
break;
}
p = p->next;
address--;
}
if(find == 0){
puts("修改位置有误,请检查!\n");
}
}
6.查找节点值
void findLink(Link* head, int val){
Link* p = head;
int idx = 0;
int find = 0;
while(p != NULL){
if(p->val == val){
find = 1;
printf("找到目标节点,位置为第%d个节点\n", idx);
break;
}
p = p->next;
idx++;
}
if(find == 0) puts("没有找到目标节点,请检查!\n");
}
二、汇总
#include <stdio.h>
#include <stdlib.h>
typedef struct LinkList{
struct LinkList* next;
int val;
}Link;
void initLink(Link* head);
void displayLink(Link* head);
void insertLink(Link* head, int address, int val);
void delLink(Link* head, int val);
void modifedVal(Link* head, int address, int val);
void findLink(Link* head, int val);
int main(void){
Link* head = (Link*)malloc(sizeof(Link));
head->val = 0;
head->next = NULL;
initLink(head);
displayLink(head);
insertLink(head, 3, 4);
displayLink(head);
delLink(head, 4);
displayLink(head);
modifedVal(head, 2, 10);
displayLink(head);
findLink(head, 4);
displayLink(head);
free(head);
return 0;
}
void initLink(Link* head){
Link* p = head;
for(int i = 0; i < 5; i++){
Link* temp = (Link*)malloc(sizeof(Link));
temp->val = i;
temp->next = NULL;
p->next = temp;
p = p->next;
}
}
void displayLink(Link* head){
Link* p = head->next;
while(p != NULL){
printf("%d ", p->val);
p = p->next;
}
puts("\r\n");
}
void insertLink(Link* head, int address, int val){
int find = 0;
Link* p = head;
if(address == 1) {
Link* temp = (Link*)malloc(sizeof(Link));
temp->val = val;
temp->next = p->next;
p->next = temp;
find = 1;
puts("插入成功!\n");
}
else{
while(p != NULL){
if(address == 0){
Link* temp = (Link*)malloc(sizeof(Link));
temp->val = val;
temp->next = p->next;
p->next = temp;
find = 1;
puts("插入成功!\n");
break;
}
address--;
p = p->next;
}
}
if(find == 0)
puts("插入位置有误,请检查!\r\n");
}
void delLink(Link* head, int val){
Link* p = head;
int find = 0;
while(p->next != NULL){
if(p->next->val == val){
p->next = p->next->next;
find = 1;
puts("删除成功\n");
break;
}
p = p->next;
}
if(find == 0)
puts("未找到目标节点,请检查!\n");
}
void modifedVal(Link* head, int address, int val){
Link* p = head;
int find = 0;
while(p != NULL){
if(address == 0){
p->val = val;
find = 1;
break;
}
p = p->next;
address--;
}
if(find == 0){
puts("修改位置有误,请检查!\n");
}
}
void findLink(Link* head, int val){
Link* p = head;
int idx = 0;
int find = 0;
while(p != NULL){
if(p->val == val){
find = 1;
printf("找到目标节点,位置为第%d个节点\n", idx);
break;
}
p = p->next;
idx++;
}
if(find == 0) puts("没有找到目标节点,请检查!\n");
}