- 用尾插法建立一个单链表,实现对单链表节点的删除、改变其数据域、查看所有的链表节点的数据域。
要求:尾插法建立、节点的删除、改变节点数据域、查看所有节点的数据域。这四个功能分别用四个函数来实现。主函数里只定义链表的头指针。
初次实践
#include <stdio.h>>
#include <stdlib.h>
#include <stdbool.h>
#define ElemType int
typedef struct LNode
{
ElemType Data;
struct LNode *Next;
}LNode,*LinkList;
void PrintList(LinkList L)
{
LinkList p;
p = L->Next;
printf("链表元素如下:\n");
while(p!=NULL)
{
printf("%d ",p->Data);
p = p->Next;
}
printf("\n");
}
LinkList CreateList_Tail(LinkList L)
{
int x;
L = (LNode*)malloc(sizeof(LNode));
LNode*s,*r = L;
scanf("%d",&x);
while(x!=9999)
{
s = (LNode*)malloc(sizeof(LNode));
s->Data = x;
r->Next = s;
r = s;
scanf("%d ",&x);
}
r -> Next = NULL;
return L;
}
LinkList del_num(LinkList L,int target)
{
if(L->Next ==NULL)
{
printf("该链表为空!\n");
return L;
}
if(L->Next->Data ==target )
{
L->Next =L->Next ->Next;
return L;
}
LNode *pre = L;
LNode *cur = L->Next ;
while(cur!=NULL&&cur->Data !=target)
{
pre = cur;
cur = cur->Next;
}
if(cur!=NULL)
{
pre->Next = cur->Next ;
free(cur);
}
return L;
}
LinkList update(LinkList L,int add,int newElem)
{
int i = 0;
LNode *temp = L;
temp = temp->Next ;
for(i=0;i<add;i++)
{
temp = temp->Next;
}
temp->Data = newElem;
return L;
}
int main()
{
LinkList L;
int num;
int add;
int newelem;
printf("尾插法建立单链表\n");
L = CreateList_Tail(L);
PrintList(L);
printf("输入要删除的数:\n");
scanf("%d",&num);
LinkList *new_L;
new_L = del_num(L,num);
PrintList(new_L);
printf("输入要修改的数");
scanf("%d %d",&add,&newelem);
L = update(L,add,newelem);
PrintList(L);
return 0;
}