全文核心思想,设置变量地址ptail, p, q。方便对链表操作
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
typedef struct node{
int data;
struct node *next;
}linklist;
creatlist();
traversal();
change();
insert_node();
delete_node();
int main(){
linklist *head;
//创建链表
head = creatlist();
traversal(head);
//修改节点
change(head);
traversal(head);
//插入节点
insert_node(head);
traversal(head);
//删除节点
delete_node(head);
traversal(head);
}
creatlist(){
linklist *head = (linklist*)malloc(sizeof(linklist));
// int *head;
if (head == NULL){
printf("创建头节点失败\n");
exit(-1);
}
linklist *tail = head;
tail->next = NULL;
int n;
printf("请输入创建链表长度:\n");
scanf("%d", &n);
printf("请输入链表数据data:\n");
for (int i = 0; i < n; ++i){
linklist *list = (linklist*)malloc(sizeof(linklist));
if (list == NULL){
printf("创建链表失败\n");
exit(-1);
}
printf("list_[%d]->data:\n", i+1);
scanf("%d", &list->data);
list->next = NULL;
tail->next = list;
tail = list;
}
return head;
}
traversal(head){
linklist *p = head;
p = p->next;
while (p != NULL){
printf("%d\n", p->data);
p = p->next;
}
}
change(head){
linklist *tail = head;
int n; int t = 0;
printf("请输入要修改第几个节点:\n");
scanf("%d", &n);
while (t < n && tail != NULL){
tail = tail->next;
t+=1;
}
printf("该节点修改值data为:\n");
scanf("%d", &tail->data);
}
insert_node(head){
linklist *tail = head;
int n; int t = 0;
printf("请输入要插入第几个节点之后:\n");
scanf("%d", &n);
while (t < n && tail != NULL){
tail = tail->next;
t += 1;
}
linklist *new = (linklist*)malloc(sizeof(linklist));
printf("该节点插入值data为:\n");
scanf("%d", &new->data);
new->next = tail->next;
tail->next = new;
}
delete_node(head){
linklist *tail = head;
linklist *p = head;
tail = tail->next;
int n; int t = 1;
printf("请输入要删除第几个节点:\n");
scanf("%d", &n);
while (t < n && tail != NULL){
tail = tail->next;
p = p->next;
t += 1;
}
p->next = tail->next;
}
创建链表图解
(郝兵老师代码)