链表

#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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值