关于数据结构的问题。急需解答

来源:百度知道 编辑:UC知道 时间:2024/05/22 01:11:42
在一个长度大于1的不带表头结点的单循环链表中,p为指向链表中任一结点的指针。试设计一个在p所指向的结点前插入一个值为x的新结点的算法

求高手解答,万分感谢!

//最近毕设,严重缺分,接此苦活,渴望理解~~
//c++实现,仅为说明算法:

//设节点Node数据结构如下:
struct Node
{
Node* previous; //前一个节点
Node* next; //下一个节点
int value; //节点值(int型)
};

//设链表List的数据结构如下:
struct List
{
Node* head; //表第一个节点
Node* end; //表最后一个节点
};

////////////////////////////////////////////////////////////////

//算法:在p前插入值x的节点
void insertPrevoius(List l,Node* p,int x)
{
//开辟新节点(指针tnp),赋值x
Node* tnp=new Node; //开辟
tnp->value=x; //赋值

//当p为表l第一个节点时
if(l.head==p)
{
tnp->next=p; //tnp后p
tnp->previous=NULL; //tnp前空
p->previous=tnp; //p前tnp
l.head=tnp; //表l第一个节点变为tnp
return;
}

//p非表l的第一个节点时
tnp->next=p; //tnp后p
tnp->previous=p->previous; //tnp前改为:原p前节点
p->previous=tnp; //p前tnp
p->previous->next=tnp; //原p前节点后:tnp
return;
}