单链表转成双向循环链表
#include<stdio.h>
#include<stdlib.h>
struct node
{
int data;
struct node*next;
};
struct Binode
{
int data;
struct Binode*next;
struct Binode*prev;
};
struct Binode*func(struct node*head);
int main()
{
//新建衣蛾单链表
struct node*head=NULL;
struct node*temp;
struct node*newnode;
struct Binode*Bihead=NULL;
struct Binode*p;
int i;
head=(struct node*)malloc(sizeof(struct node));
head->data=0;
temp=head;
for(i=1;i<=9;i++)
{
newnode=(struct node*)malloc(sizeof(struct node));
newnode->data=i;
temp->next=newnode;
temp=newnode;
}
temp->next=NULL;
//打印单链表
temp=head;
while(temp)
{
printf("%d\n",temp->data);
temp=temp->next;
}
//单链表转成双向循环链表
Bihead=func(head);
if(Bihead==NULL) printf("error\n");
printf("%d\n",Bihead->data);
p=Bihead->next;
while(p!=Bihead)
{
printf("%d\n",p->data);
p=p->next;
}
}
struct Binode*func(struct node*head)
{
struct Binode*front,*rear,*newnode;
if(head==NULL) return NULL;
front=(struct Binode*)malloc(sizeof(struct Binode));
front->data=head->data;
// printf("%d\n",front->data);
rear=front;
while(head->next)
{
newnode=(struct Binode*)malloc(sizeof(struct Binode));
newnode->data=head->next->data;
// printf("%d\n",newnode->data);
rear->next=newnode;
newnode->prev=rear;
rear=newnode;
head=head->next;
}
front->prev=rear;
rear->next=front;
return front;
}