循环链表的插入和删除

本文详细介绍了循环链表的基本操作,包括插入和删除节点的方法。通过C语言实现,展示了如何在链表的不同位置插入节点,以及如何删除指定节点。文章还提供了一个完整的示例程序,演示了循环链表的创建、插入、删除和打印过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

循环链表可以用来使计算机处理内存工作区或输出至数据缓冲区。

循环链表的插入和删除

#include"iostream"
#include
"stdlib.h"
using namespace std;

struct clist
{
int data;
struct clist *next;
};
typedef
struct clist cnode;
typedef cnode
*clink;

/*-----循环链表的输出------*/

void printclist( clink head)
{
clink ptr;
head
=head->next;
ptr
=head;
do
{
printf(
"[%d]",ptr->data);
ptr
=ptr->next;
}
while(head!=ptr && head !=head->next);
printf(
"\n");

}
/*-----循环链表的结点插入----*/

clink insertnode(clink head,clink ptr,
int value)
{
clink new_node;
new_node
=(clink) malloc(sizeof(cnode));
if(!new_node)
return NULL;
new_node
->data=value;
new_node
->next=NULL;

if(head==NULL)
{
new_node
->next=new_node;
return new_node;
}
if(ptr==NULL)
{
/*----情况1:插在第一结点之前---*/
new_node
->next=head->next;
head
->next->next=new_node;
}
else
{
/*-----情况2:插在结点之后-------*/
new_node
->next=ptr->next;
ptr
->next=new_node;
}
if(ptr==head)
head
=new_node;
return head;
}
/*---循环链表结点删除---*/
clink deletenode(clink head,clink ptr)
{
clink previous;
if(head==NULL)
{
/*----情况1:删除第一个结点----*/
head
->next=ptr->next;
}
else
{
/*--情况2:删除中间结点---*/
previous
=head;
if(head!=head->next)
while(previous->next!=ptr)
previous
=previous->next;
previous
->next=ptr->next;
}
if(ptr==head)
head
=previous;
free(ptr);
return head;
}

/*使用插入结点的方式来创建链表,完成后将链表内容输出,然后删除前后两结点*/

int main()
{
clink head
=NULL;
int list[6]={9,7,3,4,5,6};
int i;

head
=insertnode(head,head,list[0]);
printf(
"创建第一个结点: ");
printclist(head);
/*---情况1:插在第一结点前----*/
head
=insertnode(head,NULL,list[1]);
printf(
"插入第一结点之前: ");
printclist(head);
for(i=2;i<6;i++)
{
/*---情况2:插在结点之后-----*/
head
=insertnode(head,head->next,list[i]);
printf(
"插入结点之后: ");
printclist(head);
}
/*---情况1:删除第一个结点---*/
head
=deletenode(head,head->next);
printf(
"删除第一个结点: ");
printclist(head);
/*--删除最后一个结点--*/
printf(
"删除最后一个结点: ");
head
=deletenode(head,head);
printclist(head);
}

 

转载于:https://www.cnblogs.com/FCWORLD/archive/2010/11/20/1882463.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值