2 qq 27626645 qq_27626645 于 2016.03.09 15:35 提问

在长度大于1的单循环链表中既无头结点也无头指针s为指向某个结点的指针编写算法删除结点*s的前驱结点

如链表中为(1,2,3,4,5),用户输入1,则结果应为(1,2,3,4)。这种情况实现不了,求大神解答

#include
using namespace std;
typedef struct LNode
{
int data;
struct LNode *next;

}LNode,*LinkList;
void begin(LinkList &l)
{
l=new LNode;
l->next=NULL;
}
void Input(LinkList &l,int n)
{
LinkList r=l;
cout<<"请输入数据"< for(int i=0;i {
LinkList p=new LNode;
cin>>p->data;
p->next=l;
r->next=p;
r=p;

}

}
void remove(LinkList &l,LinkList &s)
{
LinkList p=s;
LinkList q;
while(p->next->next!=s)
{
p=p->next;
}
q=p->next;
p->next=s;
free(q);

}
void show(LinkList &l)
{
LinkList r=l->next;
while(r!=l)
{
cout<data<<" ";
r=r->next;
}
cout<<endl;
}
void main()
{
LinkList l,s;
begin(l);
begin(s);
LinkList r=l;

int n,m;


cout<<"请输入数据个数"<<endl;
cin>>n;
Input(l,n);
cout<<"请输入要删除数据的后一个数据"<<endl;
cin>>m;
for(int i=0;i<n;i++){
    if(r->data!=m)
    {
        r=r->next;
    }
    s=r;


}
remove(l,s);
show(l);

}

1个回答

qq_21792169
qq_21792169   2016.03.10 10:30

这个属于算法与数据结构里面的,我这儿有一个算法与数据结构的代码,希望能够找你的答案。http://blog.csdn.net/qq_21792169/article/details/49303037

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
假设在长度大于1的循环链表中,即无头结点也无头指针,s为指向链表中的某个结点的指针,试编写算法删除结点s的前驱结点
结构体: struct DulNode{     int a;     struct DulNode * next; }; /*中间是建循环链表和对链表其他操作的代码*/ //前提是s结点是循环链表中的一个结点 void del(struct DulNode * s) {     struct DulNode *q, *p1, *p2;     //
已知循环链表(长度大于1)中某一个结点s, 要求编写算法删除s的前驱结点。(在这个模块中未知头指针和尾指针)
类似一个循环链表 a->b->c->d 现在 有个指针 指向c 现在需要删除 b已知循环链表(长度大于1)中某一个结点s, 要求编写算法删除s的前驱结点。(在这个模块中未知头指针和尾指针)
无头节点的单循环链表中删除指针s所指结点的前驱结点
//返回L后第n个节点(n可超过L的总节点个数) LNode *creLNodePoint(CLinkList L, int n); //删除s的前驱节点 void delPrior(LNode *s);
指针p,q,r依次指向某循环链表中三个相邻的结点,交换结点*q,*r在表中次序的程序段是
[A] p->next=r; q->next=r->next; r->next=q;     [B] p->next=r; r->next=q; q->next=r->next;     [C] r->next=q; q->next=r->next; p->next=r;     [D] r->next=q; p->next=r; q->next=r->next; 从度娘获取的答案是B,仔
编写一个函数删除结点的前驱结点
假设在长于大于1的循环单链表中,即无头结点也无头指针,P为指向该链表中某个结点的指针. Status Delete_Pre(CiLNode*s) //删除单循环链表中结点s的直接前驱 { p=s; while(p->next->next!=s) p=p->next; //找到s的前驱的前驱p q=p->next;p->next=s;free(q); return OK; }
009实现一个算法来删除单链表中的一个结点,只给出指向那个结点的指针(keep it up)
呵呵,这个题不能直接删除已知的结点,因为是单链表,不知道前驱,只知道 后继结点,直接删除会使链表断开。不过我们可以删除已知结点的后继结点, 把后继结点的值赋值给已知结点。 #include struct Node { int data; Node* next; }; bool removeNode(Node* vNode) { if (vNode == NULL || vNo
pointer指向链表的某结点(非尾结点), 且不知道该结点的前驱结点(也不知道更前驱的结点), 请给出删除该结点的方法
pointer指向链表的某结点(非尾结点), 且不知道该结点的前驱结点(也不知道更前驱的结点), 现在我们要删除该结点, 怎么做呢? 思维死板的人肯定说, 没有办法啊, 其实, 办法是有的, 只不过是间接的。        下面, 我们给出一个极其简单的程序: #include using namespace std; typedef struct node { int data; st
线性表习题
<br />绪言和线性表习题<br />一、    选择题类型<br />1、.在一个单链表中,若p↑结点不是最后结点,在p↑之后插入s↑结点,则实行(      )。<br />  A. s->next=p;p->next=s;     <br />  B、 s->next=p->next; p->next=s;<br />  C. s->next=p->next;p=s;     <br />  D. p->next=s;s->next=p;<br />2.与单链表相比,双链表优点之一(   ).<br
《数据结构》实验
顺序存储的线性表 时数 2 性质 验证 内容:1、设线性表存放在向量A[arrsize]的前elenum个分量中,且递增有序。试设计一算法,将x插入到线性表的适当位置上,以保持线性表的有序性。 2、用向量作存储结构,试设计一个算法,仅用一个辅助结点,实现将线性表中的结点循环右移k位的运算。 3、用向量作存储结构,试设计一个算法,仅用一个辅助结点,实现将线性表逆置的运算。 要求:了解线性表的逻辑结构特征,熟练掌握线性表的顺序存储结构的描述方法,及在其上实现各种基本运算的方法。 单链表上的操作 时数 2 性质 验证 内容:1、已知带头结点的动态单链表L中的结点是按整数值递增排序的,试写一算法将值为x的结点插入到表L中,使L仍然有序。 2、设计一算法,逆置带头结点的动态链表L。要求利用原表的结点空间,并要求用尽可能少的时间完成。 3、假设有两个按元素值递增有序的线性表A和B,均以单链表作存储结构,试编写算法将A表和B表归并成一个按元素值递减有序的线性表C,并要求利用原表的空间存放C。 要求:熟练掌握线性表的单链式链接存储结构及在其上实现线性表的各种基本运算的方法。 循环链表和双链表 时数 2 性质 验证 内容:1、假设在长度大于1的单循环链表中,既无头结点也无头指针。s为指向某个结点的指针,试编写算法删除结点*s的直接前驱结点。 2、已知由单链表表示的线性表中,含有三类字符的数据元素(如:字母、数字和其它字符),设计算法构造三个以循环链表示的线性表,使每一个表中只含同一类的字符,且利用原表中的结点空间作为这三个表的空间。(头结点可以另辟空间) 3、有一双链表,每个结点中除有prior、data和next域外,还有一访问频度域freq,在链表被启用前,其值均初始化为零。每当在链表上进行一次LOCATE(L,x)运算,元素值为x的结点中freq域的值增1,并使此链表中结点保持按freq递减的顺序排列,以便使频繁访问的结点总是靠近表头。设计满足上述要求的LOCATE算法。 要求:熟练掌握线性表的循环链式和双链式链接存储结构及在其上实现线性表的各种基本运算的方法。 栈和队列 时数 2 性质 验证 内容:1、设单链表中存放着n个字符,设计算法,判断该字符串中是否有中心对称关系。例如:xyzzyx、xyzyx都算是中心对称的字符串。 2、设计算法判断一个算术表达式的圆括号是否配对。(提示:对表达式进行扫描,遇‘(’进栈,遇‘)’退掉栈顶的‘(’,表达式被扫描完毕,栈为空) 3、假设以带头结点的循环链表表示队列,并只设一个指针指向队尾,编写相应的置队空、入队和出队算法。 要求:掌握栈和队列的数据结构的特点;熟练掌握在两种存储结构上实现栈和队列的基本运算;学会利用栈和队列解决一些实际问题。 串运算的实现 时数 2 性质 验证 内容:1、若X和Y是用结点大小为1的单链表表示的串,设计算法找出X中第一个不在Y中出现的字符。 2、设计一算法,在顺序串上实现串的比较运算strcmp(S,T)。 3、若S和T是用结点大小为1的单链表存储的两个串,设计算法将S中首次与T匹配的子串逆置。 要求:熟练掌握串的顺序和链接存储结构的实现方法;熟练掌握在两种存储结构上实现串的各种运算。 树的应用 时数 2 性质 验证 内容:1、以二叉链表作存储结构,设计求二叉树高度的算法。 2、一棵n个结点的完全二叉树用向量作存储结构,用非递归算法实现对该二叉树进行前序遍历。 3、以二叉链表作存储结构,编写非递归的前序、中序、后序遍历算法。 要求:熟悉二叉树的各种存储结构的特点及适用范围;掌握建立二叉树的存储结构的方法;熟练掌握二叉树的前序、中序、后序遍历的递归及非递归算法;灵活运用递归的遍历算法实现二叉树的其它各种运算。
线性表链表表相关习题及详解(选择题) ——数据结构
本文章主要结合习题来回顾一下线性表中链表的相关知识,这方面还可以看我另一篇文章线性表——Data Structure(C语言描述)单链表typedef struct LNode{ //定义单链表结点类型 ElemType data; //数据域 struct LNode *next; //指针域 }LNode,*LinkList;双链表typed