#include<stdio.h>
#include<stdlib.h>
/*
链表及其操作
*/
/*定义*/
typedef struct node{
int data;//数据域
struct node *next;//指针域
}LNode,*LinkList;
/*遍历链表*/
void printLinkList(LinkList p){
if(!p)
exit(0);
printf("--------------------\n");
while(p)
{
printf("%d\n",p->data);
p = p->next;
}
}
/*创建链表*/
LinkList createLinkList(int n){//n为链表长度
//r为链表最后指针,p为要插入的指针,list为链表头指针
LinkList p,r,list = NULL;
int i,e;
for(i=0;i<n;i++)
{
scanf("%d",&e);
p = (LinkList)malloc(sizeof(LNode));
p->data = e;
p->next = NULL;
if(!list)
list = p;
else
r->next = p;
r = p;
}
return list;
}
/*插入节点*/
void insertList(LinkList *list,LinkList q,int e){
//向链表中q指向的节点后面插入节点,数据为e
LinkList p;
p = (LinkList) malloc (sizeof(LNode));
p->data = e;
if(!*list){
*list = p;
p->next = NULL;
}
else{
p->next = q->next;
q->next = p;
}
}
/*删除节点*/
//前驱已知,为r
void delLink(LinkList *list,LinkList r,LinkList q){
if(q==*list)
*list = q->next;
else
r->next = q->next;
free(q);
}
//前驱未知,需要遍历寻找
void delLinkB(LinkList *list,LinkList q){
LinkList r;
if(q==*list){
*list = q->next;
free(q);
}
else{
for(r=*list;r->next!=q;r=r->next);
if(r->next!=NULL){
r->next = q->next;
free(q);
}
}
}
/*销毁链表*/
void destroyLinkList(LinkList *list){
LinkList p,q;
p = *list;
while(p){
q = p->next;
free(p);
p = q;
}
*list = NULL;//防止list变为野指针
}
int main()
{
LinkList list,p;
list = createLinkList(5);
p = list->next;
printLinkList(list);
insertList(&list,p,5);
printLinkList(list);
p = p->next;
delLinkB(&list,p);
printLinkList(list);
//destroyLinkList(&p);
destroyLinkList(&list);
return 0;
}
链表
最新推荐文章于 2024-06-14 09:15:00 发布