#include <stdio.h>
#include <stdlib.h>
#include <iostream>
typedef int ElemType;
typedef struct Node {
ElemType data;
struct Node *next;
}Node,*LinkedList;
LinkedList LinkedListInit() {
Node *L;
L = (Node *)malloc(sizeof(Node));
if(L == NULL) {
printf("申请内存空间失败\n");
}
L->next = NULL;
return L;
}
//改为尾插法
LinkedList LinkedListCreatH() {
Node *L, *head;
head = (Node *)malloc(sizeof(Node));
head->next = NULL;
L = head;
ElemType x;
while(scanf("%d",&x) != EOF) {
Node *p;
p = (Node *)malloc(sizeof(Node));
p->data = x;
L->next = p;
p->next = NULL;
L = p;
}
return head;
}
//增加的查找功能
LinkedList LinkedListFind( LinkedList L, ElemType num)
{
Node *p = L->next;
while(p != NULL && p->data != num) { //从第1个结点开始查找data域为num的结点
p = p->next;
}
return p;//找到后返回该结点指针,否则返回NULL
}
LinkedList LinkedListInsert(LinkedList L,int i,ElemType x) {
Node *pre;
pre = L;
int tempi = 0;
for (tempi = 1; tempi < i; tempi++) {
pre = pre->next;
}
Node *p;
p = (Node *)malloc(sizeof(Node));
p->data = x;
p->next = pre->next;
pre->next = p;
return L;
}
LinkedList LinkedListDelete(LinkedList L,ElemType x)
{
Node *p,*pre;
p = L->next;
while(p->data != x) {
pre = p;
p = p->next;
}
//加 if else 语句就可以删除第一个数据了
if(x==L->next->data){
L->next = L->next->next;
}
else{
pre->next = p->next;
}
free(p);
return L;
}
int main() {
LinkedList list,start;
printf("请输入单链表的数据:");
list = LinkedListCreatH();
for(start = list->next; start != NULL; start = start->next) {
printf("%d ",start->data);
}
printf("\n");
ElemType num;
printf("请输入你要查找的数: ");
scanf("%d",&num);
if(LinkedListFind( list, num) != NULL) {
printf("这个数存在\n");
}
else {
printf("这个数不存在\n");
}
int i;
ElemType x;
printf("请输入插入数据的位置:");
scanf("%d",&i);
printf("请输入插入数据的值:");
scanf("%d",&x);
LinkedListInsert(list,i,x);
for(start = list->next; start != NULL; start = start->next) {
printf("%d ",start->data);
}
printf("\n");
printf("请输入要删除的元素的值:");
scanf("%d",&x);
LinkedListDelete(list,x);
for(start = list->next; start != NULL; start = start->next) {
printf("%d ",start->data);
}
printf("\n");
return 0;
}