关于数据结构中单向循环链表删除元素的问题

单向循环链表中删除第K个元素以及删除值为X的点。(不得调用查找的方法)恩本来在编这个程序的时候应该先查找第K-1个结点。如:p=get_linklist(H,k-1);的... 单向循环链表中删除第K个元素以及删除值为X的点。(不得调用查找的方法)
恩本来在编这个程序的时候应该先查找第K-1个结点。如:p=get_linklist(H,k-1);的,但是现在不能用这种方法,有没有另外一种方法。
谁会做这两个题,帮忙把程序写出来。
删除第K个元素和删除值为X的点是不一样的。
展开
 我来答
sjetlin
推荐于2016-03-22 · TA获得超过281个赞
知道答主
回答量:20
采纳率:0%
帮助的人:21.9万
展开全部

#include<iostream>

using namespace std;

typedef double ElemType;//double类型可以换成其他的

typedef struct RLNode

{

 //定义循环链表的节点

 ElemType data;

 struct RLNode *next;

}RLNode,*RLinkList;

//-------------------------------------------

void CreateList_RL ( RLinkList & L);//创建一个循环链表

void ScanList_RL ( RLinkList L);//遍历循环链表

void DeleteList_RL ( RLinkList & L,int K,ElemType X);//删除第K个节点以及删除值为X的点

//------------------------------------------

void main()

{

 RLinkList L=(RLinkList) malloc ( sizeof(RLNode) );

    L->next=L;//创建空的循环链表

 cout<<"请输入循环链表各个节点的数(double型),-1表示结束"<<endl<<endl;

 CreateList_RL(L);

 cout<<"输入的循环链表各个节点的数为"<<endl;

 ScanList_RL(L);

 cout<<"请输入要删除的循环链表节点位序,以及要删除的值"<<endl;

 int K;  ElemType X;  cin>>K>>X;

 DeleteList_RL ( L,K,X);

 cout<<"删除后得到的循环链表各个节点的数为"<<endl;

 ScanList_RL (L);

}

//---------------创建循环链表-----------------

void CreateList_RL ( RLinkList & L)

{

 ElemType t;   cin>>t;

 while(t!=-1)

 {

     RLinkList p= (RLinkList) malloc ( sizeof(RLNode) );//申请一个新的节点

  p->data=t;

  //将新节点接到末尾,并将指针L后移一位,

  p->next=L->next;

  L->next=p;

  L=L->next;

        cin>>t;

 }

 //因为现在L指向尾节点,为得到头结点应后移一位

 L=L->next;

}  

//----------------遍历循环链表--------------------

void ScanList_RL ( RLinkList L)

{

 RLinkList p=L->next;

 while(p!=L)

 {

  cout<<p->data<<" ";

     p=p->next;

 }

 cout<<endl<<endl;

}

//--------------删除第K个节点以及删除值为X的点-----------

void DeleteList_RL ( RLinkList & L,int K,ElemType X)

{

 RLinkList p=L,q;

 int i=0;

 while(p->next!=L)

 {   //所有的操作都要在p->next!=L下进行

        //当p的下一个节点位序为K或者下一个节点值为X,删除

  if(i==K-1 || p->next->data==X)

  {

   q=p->next;

   p->next=q->next;

   free(q);

   i++;//若在还没到K之前就删节点,会影响位序,所以要做i++

  }

  //i<K-1时使用++是为了得到i=K-1的点,当i==K-1上面已经做了++,

  //此时i会大于K-1

  if(i<K-1)

   i++;

  p=p->next;

 }

}

//---------------------------------------------------

woke666
2009-03-06 · TA获得超过153个赞
知道答主
回答量:97
采纳率:0%
帮助的人:0
展开全部
不是很明白你的话啊,当做单链表来做,那我先删值为x的点,在判断值为x的点是不是在第k个元素前面,位置根据这个条件k个元素是否变化,最后把尾节点和头节点连接起来,这样算另外一种方法吗,你能再解释具体点吗,自己最近就在动手想把链表的都写下,有兴趣做做的。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
人焊合一
2009-03-06 · TA获得超过4113个赞
知道大有可为答主
回答量:1922
采纳率:0%
帮助的人:1583万
展开全部
这个问题嘛,比较不对行。只是看看。是否有高手来解答
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式