C语言链表操作:创建、插入、删除和显示
#include <stdio.h>
#include <stdlib.h>
//定义链表结点结构体
typedef struct node {
int data;
struct node *next;
} Node;
//创建链表
Node *createList() {
Node *head = (Node*)malloc(sizeof(Node));
head->next = NULL;
return head;
}
//插入结点
void insertNode(Node *head, int pos, int data) {
Node *p = head;
int i = 0;
while (p && i < pos - 1) {
p = p->next;
i++;
}
if (!p || i > pos - 1) {
printf('插入位置有误!\n');
return;
}
Node *newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = p->next;
p->next = newNode;
}
//删除结点
void deleteNode(Node *head, int pos) {
Node *p = head;
int i = 0;
while (p->next && i < pos - 1) {
p = p->next;
i++;
}
if (!p->next || i > pos - 1) {
printf('删除位置有误!\n');
return;
}
Node *delNode = p->next;
p->next = delNode->next;
free(delNode);
}
//显示链表
void displayList(Node *head) {
Node *p = head->next;
while (p) {
printf('%d ', p->data);
p = p->next;
}
printf('\n');
}
int main() {
Node *head = createList();
int choice, pos, data;
while (1) {
printf('1.插入结点\n2.删除结点\n3.显示链表\n4.退出程序\n');
printf('请选择操作:');
scanf('%d', &choice);
switch (choice) {
case 1:
printf('请输入要插入的位置和元素:');
scanf('%d %d', &pos, &data);
insertNode(head, pos, data);
break;
case 2:
printf('请输入要删除的位置:');
scanf('%d', &pos);
deleteNode(head, pos);
break;
case 3:
displayList(head);
break;
case 4:
exit(0);
default:
printf('输入有误,请重新选择!\n');
break;
}
}
return 0;
}
原文地址: https://www.cveoy.top/t/topic/nran 著作权归作者所有。请勿转载和采集!