标签:linklist int 单向 next 链表 循环 printf rear
源程序:
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int data;
struct node *next;
}linklist;
//创建单向循环链表
linklist *creatlist()
{
linklist *head, *p, *rear;
int x;
head = (linklist *)malloc(sizeof(linklist));
head->next = NULL;
rear = head;
printf("请输入链表内容(整数),以0结束:\n");
scanf("%d", &x);
while (x)
{
p = (linklist *)malloc(sizeof(linklist));
p->data = x;
rear->next = p;
rear = p;
scanf("%d", &x);
}
rear->next = head;//尾指针指向头结点
return rear;
}
//删除单向循环链表中指定的结点
void delete_key(linklist *rear, int key)
{
linklist *p, *q;
int deleted = 0;//用于标记是否删除过
p = rear->next;
q = p->next;
while (q != rear->next)
{
if (q->data == key && q != rear)
{
p->next = q->next;
free(q);
q = p->next;
deleted = 1;
}
else if (q->data == key && q == rear)
{
p->next = q->next;
free(q);
q = p->next;
deleted = 1;
}
p = q;
q = q->next;
/* if(q->data==key && q==rear) //如果删除的是最后一个结点
{
p->next=q->next;
free(q);
q=p->next;
deleted=1;
}
*/
}
if (deleted)
printf("已删除!\n");
else
printf("没有找到该结点!\n");
}
//输出单循环链表
void print(linklist *rear)
{
linklist *p;
printf("\n当前链表如下:\n");
p = rear->next->next;
while (p != rear->next)
{
printf("%5d", p->data);
p = p->next;
}
printf("\n");
}
int main()
{
linklist *rear;
rear = creatlist();
print(rear);
//删除循环链表中指定的值
int k;
printf("删除循环链表中指定的值");
scanf("%d", &k);
delete_key(rear, k);
print(rear);
system("pause");
return 1;
}
运行结果:
标签:linklist,int,单向,next,链表,循环,printf,rear 来源: https://www.cnblogs.com/duanqibo/p/11841152.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。