单向带环链表是指环的起点不是链表的第一个结点,可看成一个单向链表和一个环形链表的组合。
(1)先创建一个单向循环链表
using namespace std;
typedef int type;
//结点点定义
typedef struct node
{
type data;
struct node *next;
}Node,*pNode;
//单循环链表创建
pNode CreateListCircle(type *val, int n)
{
pNode temp;
pNode head=(pNode)malloc(sizeof(Node));
if(NULL==head)
{
printf("Error for malloc!");
exit(-1);
}
temp=head;
temp->next=temp;
for(int i=0;i<n;i++)
{
pNode newNode=(pNode)malloc(sizeof(Node));
if(NULL==newNode)
{
printf("Error for malloc!");
exit(-1);
}
newNode->data=val[i];
temp->next=newNode;
temp=newNode;
temp->next=head;
}
return head;
}
(2)其次找到尾指针和环的起始点
//创建单向带环链表
pNode CreateList_Circle(type *val,int n, int m)
{
pNode pHead=CreateListCircle(val,n); //先创建一个单循环链表
pNode p,q;
p=q=pHead->next;
//寻找尾指针
for(int i=0;i<n-1;i++)
{
p=p->next;
}
//寻找环的起始点m
if(m==0)//环起始点为头结点
{
}
else
{
for(int i=0; i<m-1;i++)
{
q=q->next;
}
p->next=q;
}
return pHead;
}