假设有一个循环链表的长度大于1,且表中既无头结点也无头指针。已知p为指向链表中某结点的指针,试编写算法在链表中删除结点p 的前趋结点。
typedefstructNode
{
intiData;
Node* next;
}*ReLinkList,ReNode;
//
// 创建一个循环链表;
ReLinkListCreat(intn)
{
ReLinkListhead = NULL;
ReLinkListp;
ReLinkListr = NULL;
intiTemp = 0;
cout << "根据您传入n的值,来输入n个数字:"<< endl;
for (inti = 0;i< n;++i)
{
cin >> iTemp;
p = (ReLinkList)malloc(sizeof(ReNode));
p->iData = iTemp;
p->next = head;
if (head == NULL)
{
head = p;
}
else
{
r->next = p;
}
r = p; /一定要注意此处的r,很关键的。非常容易出错。
}
returnhead;
}
voidDeletePRE(ReLinkList&p)
{
ReLinkListq, r = p;
while(1)
{
r = r->next;
if (r->next->next == p)
{
q = r->next;
r->next = p;
free(q);
}
}
}