C语言单链表的创建,修改,插入等

C语言单链表的创建,修改,插入等
#include
#include
#include
typedef struct LNode{
int data;
struct LNode* next;
}ListNode,*LinkList;
LinkList initList(LinkList L){ //头节点,第一个节点的数据域不存放数据
//头节点指针
L = (LinkList)malloc(sizeof(ListNode)); //分配空间,L是一个指针
if(L==NULL){
printf("%s","location space fail");
exit(1);
}
L->next = NULL;
return L;
}
LinkList creatListHead(int n){//头插法建立链表
LinkList L;
ListNode *p;
L = initList(L);
int x;
while(n--){
p = (ListNode *)malloc(sizeof(ListNode));
scanf("%d",&x);
p->data = https://www.it610.com/article/x;
p->next=L->next; //把L的next赋值给p
L->next = p; //让头指针指向新插入的节点
}
return L;
}
LinkList createListRear(int n){//尾插法建立链表

int x = 0;
ListNode *L,*r,*p;
L = initList(L); //初始化头节点
r = L; // 把头节点赋值给尾节点,让尾指针指向头节点
//int arr[5] = {1,2,3,4,5};
while(n--){
scanf("%d",&x); //必须加&,这样才会改变x的数值,不然下面赋值的时候就是赋x没有输入的值
p = (ListNode *)malloc(sizeof(ListNode)); // 建立一个新的节点
p->data = https://www.it610.com/article/x;
p->next = NULL; //尾插法最后一个元素的指针域总是为空
r->next = p; //把尾指针指向新插入的节点
r = p; //将新的节点作为尾指针,即将p赋值给r,在这里,
//r只是一个尾指针,负责的只是指向谁的问题,我们将
//p赋值给r,那么r就指向p
}
return L; //返回头节点,因为 r=L,即尾指针一开始是指向头节点的
}

void outputs(LinkList L){
LinkList p = L->next;
for(; p!=NULL; p=p->next){
printf("%d\n",p->data);
}
printf("\n");
}
LinkList FindByValue(LinkList L,int value){ //值查找
LinkList p = L->next;
int i=0;
while(p!=NULL){
i++;
if(p->data=https://www.it610.com/article/=value){
printf("%d\n", p->data);
printf("%s\n", "序号是");
printf("%d\n", i);
}
p=p->next;
}
}
LinkList FindByIndex(LinkList L,int n){//序号查找
LinkList p = L->next;
if(n==0){
printf("%d",p->data);
}
if(n<1){
printf("%s","序号错误");
}
while(--n&&p!=NULL){
//printf("%d\n",n);
p = p->next;
}
printf("%d\n",p->data);
}
LinkList insert(LinkList L,ListNode *p,int n){//插入数据
LinkList head = L->next; //头节点是空的,不存数据

while(--n){
head = head->next;
}

p->next = head->next;
head->next = p;
outputs(L);
return L;
}
ListNode *deletePoint(ListNode *L, int n){//删除结点
ListNode *p = L->next;
n = n-1;
while(--(n)){//相当于(n-2)--
p = p->next;
}
ListNode *q; //保存要删除的指针
q = p->next;
p->next = q->next;
outputs(L);
free(q);
return L;
}
int length(LinkList L){
int count = 0;
while(L->next!=NULL){
L = L->next;
count++;
}
return count;
}
int main(){
//LinkList L =createListRear(2);
LinkList H =createListRear(5);
ListNode *p;
p = (LinkList)malloc(sizeof(ListNode));
p->data = https://www.it610.com/article/12;
H = insert(H,p,2);
H = deletePoint(H,2);
printf("%d\n",length(H));
//FindByIndex(H,2);
//FindByValue(H,31);
//printf("%d",H->next->data);
//outputs(H);
return 0;
}
【C语言单链表的创建,修改,插入等】

    推荐阅读