通过键盘输入建立单链表
建表:通过键盘输入链表中的数据,不同数据以空格为间隔,遇到回车则停止输入。
操作:输入指定数值,在单链表中删除与指定值相等的结点,并输出最终链表。
输入
1 2 5 6 5
5
输出
1 2 6
#include <stdio.h>
#include <stdlib.h>
//给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点
typedef struct node{
int value;
struct node *next;
}Linknode;
int main(void){
Linknode *head = (Linknode *) malloc(sizeof(Linknode)), *tmp;
head->next = NULL;
head->value = -1;//-1代表为虚拟头节点,不存储有意义的数据
tmp = head;
while(1){
int value;
char ch;
scanf("%d",&value);
scanf("%c",&ch);
//动态链表需要用malloc申请
Linknode *node = (Linknode *) malloc(sizeof(Linknode));
node->value = value;
head->next = node;
head = head->next;
if( ch == '\n') {
//后面没有数据 指针置空
node->next = NULL;break;
}
}
int num; scanf("%d",&num);
head = tmp;
Linknode* cur = head;
//删除时结点要后移!!!!
while (cur->next != NULL) {
if (cur->next->value == num) {
cur->next = cur->next->next;
}
cur = cur->next;
}
while(head->next!= NULL ){
printf("%d ",head->next->value);
head = head->next;
}
return 0;
}