void deleteNode(List head){ int i; Node *p = head; printf("请输入要删除的位置:\n"); scanf("%d", &i); //输入要删除的位置 for(int j=0; j<i-1 && p->next; j++){ //遍历单链表找到指定位置的前驱结点 p = p->next; } if(!p->next){ //删除位置不合法 printf("删除位置不合法\n"); return; } Node *q = p->next; //q指向要删除的结点 p->next = q->next; //当前结点的指针域指向要删除结点的后继结点 free(q); //释放要删除的结点 printList(head); //输出单链表所有结点值 }并整合成一个完整的程序
时间: 2024-01-29 14:02:42 浏览: 64
CLanguage-list-routine-.rar_site:www.pudn.com
好的,以下是您要求的程序,请检查:
```c
#include <stdio.h>
#include <stdlib.h>
// 单链表结点结构体定义
typedef struct Node{
int data;
struct Node *next;
} Node, List;
// 创建单链表
List* createList(int n){
List *head = (List*)malloc(sizeof(Node));
head->next = NULL;
Node *p = head;
for(int i=0; i<n; i++){
Node *newNode = (Node*)malloc(sizeof(Node));
printf("请输入第%d个结点的值:", i+1);
scanf("%d", &(newNode->data));
newNode->next = NULL;
p->next = newNode;
p = p->next;
}
return head;
}
// 遍历单链表并输出所有结点的值
void printList(List *head){
Node *p = head->next;
printf("当前单链表的所有结点值为:");
while(p){
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
// 删除单链表中指定位置的结点
void deleteNode(List *head){
int i;
Node *p = head;
printf("请输入要删除的位置:\n");
scanf("%d", &i); //输入要删除的位置
for(int j=0; j<i-1 && p->next; j++){ //遍历单链表找到指定位置的前驱结点
p = p->next;
}
if(!p->next){ //删除位置不合法
printf("删除位置不合法\n");
return;
}
Node *q = p->next; //q指向要删除的结点
p->next = q->next; //当前结点的指针域指向要删除结点的后继结点
free(q); //释放要删除的结点
printList(head); //输出单链表所有结点值
}
int main(){
List *head = NULL;
int n;
printf("请输入单链表的长度:");
scanf("%d", &n);
head = createList(n);
printList(head);
deleteNode(head);
return 0;
}
```
注意:该程序中删除结点的位置从1开始计算,即第一个结点的位置为1。若要从0开始计算,请将for循环中的i-1改为i。
阅读全文