思路:定义不同的函数来完成不同的操作,基本操作有,插入,定义结构体,初始化
插入的时候采用头插法可以逆序输出,所以可以采用尾插法。
注:这里先用了数组存取输入的数,其实可以直接将输入内容放入到链表中。
实现代码:
头插法,正序输出
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct node{
int data;
struct node *next;
}LNode,*LinkList; //单链表节点类型、单链表类型
void Init_LinkList(LinkList *L){
*L=(LNode *)malloc(sizeof(LNode));
(*L)->next=NULL;
}
void *Insert_LinkList(LinkList L,int x){
LNode *s;
s=(LNode *)malloc(sizeof(LNode));
s->data=x;
L->next=s;
return s;
}
void deleteNode(LinkList L) {
L->data=L->next->data;
L->next=L->next->next;
}
void *Locatex_LinkList(LinkList L,int x){
LNode *p=L;
while (p->next!=NULL&&p->next->data!=x) {
p=p->next;
}
return p->next;
}
int main(){
LinkList L;
Init_LinkList(&L);
LNode *p=L;
LNode *LL=L;
int arr[10000],i=0;
do {
scanf("%d",&arr[i]);
i++;
} while(getchar()==' ');
for(int j=1;j<i;j++){
LL=Insert_LinkList(LL, arr[j-1]);
}
p=Locatex_LinkList(p, arr[i-1]);
deleteNode(p);
LNode *d=L;
while(d->next!=NULL){
d=d->next;
printf("%d ",d->data);
}
}
尾插法逆序输出
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct node{
int data;
struct node *next;
}LNode,*LinkList; //单链表节点类型、单链表类型
void Init_LinkList(LinkList *L){
*L=(LNode *)malloc(sizeof(LNode));
(*L)->next=NULL;
}
void Insert_LinkList(LinkList L,int x){
LNode *s;
s=(LNode *)malloc(sizeof(LNode));
s->data=x;
s->next=L->next;
L->next=s;
}
void deleteNode(LinkList L) {
L->data=L->next->data;
L->next=L->next->next;
}
void *Locatex_LinkList(LinkList L,int x){
LNode *p=L;
while (p->next!=NULL&&p->next->data!=x) {
p=p->next;
}
return p->next;
}
int main(){
LinkList L;
Init_LinkList(&L);
LNode *p=L;
LNode *LL=L;
int arr[10000],i=0;
do {
scanf("%d",&arr[i]);
i++;
} while(getchar()==' ');
for(int j=1;j<i;j++){
Insert_LinkList(LL, arr[j-1]);
}
p=Locatex_LinkList(p, arr[i-1]);
deleteNode(p);
LNode *d=L;
while(d->next!=NULL){
d=d->next;
printf("%d ",d->data);
}
}
实现结果: