再删除释放链表的所有结点中abc的结点并记录其位置后如何恢复(怎么记录位置和恢复)

删除单链表的头结点要怎么做?_百度知道
删除单链表的头结点要怎么做?
提问者采纳
只要将头结点的指针域指向首元结点的下一个结点就行了,释放,就行了。
例如,L是头结点的指针,next是结点的指针域。那就是
L-next = s-这样就搞定了。
其他类似问题
头结点的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁在一个长度为n的单链表L中,删除链表中*p的前驱结点的时间复杂度为_________。_百度知道
在一个长度为n的单链表L中,删除链表中*p的前驱结点的时间复杂度为_________。
提问者采纳
#include&iostream&#include &malloc.h&#define FALSE 0#define TRUE 1#define OK
1#define ERROR
0#define MaxSize 10typedef char ElemTtypedef struct Node{
Node *}Node, *LinkLint InitList_L(LinkList *L){
*L=(LinkList)malloc(sizeof(Node));
exit (FALSE);
(*L)-&next=NULL;
TRUE;}void qcreate(LinkList L){
while(flag)
/* flag初值为1,当输入&#&时,置flag为0,建表结束*/
c=getchar();
if(c!='#')
s=(Node*)malloc(sizeof(Node)); /*建立新结点s*/
s-&data=c;
s-&next=L-&/*将s结点插入表头*/
L-&next=s;
}}//计算链表长度void length(LinkList L) {
while(p!=NULL)
}printf(&%d&,j);
printf(&\n&);} //输出链表void printf(LinkList L){
while(p-&next!=NULL)
printf(&%c&,p-&data);
printf(&\n&);}//对链表排序void paixu(LinkList L){
Node *r,*q,*
for(r=L-&r-&next!=NULL;r=r-&next) {
for(q=r-&q;q=q-&next) /*找到链表中最小字符*/
if(q-&data&small-&data)
if(small!=r)
r-&data=small-&
/*把最小的数值换到P指针所指的位置数值上(原P指针的next指向不变)*/small-&data=
/*把原先p指针所指位置的数值填入被置换出的最小字符位置*/
printf(L);} //
查找第i个结点void Get(LinkList L, int i)/*在带头结点的单链表L中查找第i个结点,若找到(1≤i≤n),则返回该结点的存储位置; 否则返回NULL*/{
/*从头结点开始扫描*/
while ((p-&next!=NULL)&&(j&i))
/* 扫描下一结点*/
/* 已扫描结点计数器 */
if(i == j)
printf(&%c&,p-&data);
/* 找到了第i个结点 */
printf(&NULL&);
/* 找不到,i≤0或i&n */
printf(&\n&);}
//在单链表中找到与x相同的数值void Getchar(LinkList &L){
cout&&&输入这个元素:&;
while(p-&data!=n)
if(p-&next==NULL)
printf(&FALSE&);
printf(&TRUE&);}//
插入结点void cins(LinkList L,int i,ElemType x) /*在带头结点的单链表L中第i个位置插入值为e的新结点s*/{
Node *pre,*s;
/*从&头&开始,查找第i-1个结点*/
while(pre!=NULL&&k&i-1)
/*表未查完且未查到第i-1个时重复,找到pre指向第i-1个*/
/*查找第i-1结点*/
/*如当前位置pre为空表已找完还未数到第i个,说明插入位置不合理*/
printf(&插入位置不合理!&);
s=(Node*)malloc(sizeof(Node));
/*申请一个新的结点S */
s-&data=x;
/*值e置入s的数据域*/
s-&next=pre-&
/*修改指针,完成插入操作*/
pre-&next=s;
printf(&插入成功!链表为:&);}//删除结点void del(LinkList L,int i)/*在带头结点的单链表L中删除第i个元素,并将删除的元素保存到变量e中*/{
Node *pre,*r;
while(pre-&next!=NULL && k&i-1) /*寻找被删除结点i的前驱结点i-1使p指向它*/
/*查找第i-1个结点*/
if(!(pre-&next))
/* 即while循环是因为p-&next=NULL或i&1而跳出的,而是因为没有找到合法的前驱位置,说明删除位置i不合法。*/
printf(&删除结点的位置i不合理!&);
pre-&next=pre-&next-&
/*修改指针,删除结点r*/
/*释放被删除的结点所占的内存空间*/
printf(&成功删除结点!链表为:&);}void main(){
LinkList L;
InitList_L(&L);
int flag=1;
printf(&初始化单链表: (请输入10个以内的字符,以'#'结尾,之间无须空格)\n&); qcreate(L);
printf(L); while(flag)
printf(&请选择操作:&);
printf(&\n&);
printf(&1.插入结点&);
printf(&\n&);
printf(&2.删除结点&);
printf(&\n&);
printf(&3.查找第i个元素&);
printf(&\n&);
printf(&4.求链表长度 &);
printf(&\n&);
printf(&5.是否能在单链表中找到与x相同的数值&);
printf(&\n&);
printf(&6.输出链表&);
printf(&\n&);
printf(&7.排序&);
printf(&\n&);
printf(&8.退出&);
switch(e){case 1:printf(&请输入要插入的元素值:&);
printf(&请输入要在第几个结点处&);
cins(L,i,x);
printf(L);
case 2: printf(&请输入你要删除第几个结点: &);
printf(L);
case 3:printf(&请输入位置i: &);
printf(&数值为:&);
case 4:printf(&链表长度为:&);
length(L);
case 5:Getchar(L);
case 6:printf(L);
case 7:paixu(L);
case 8:flag=0; }}
其他类似问题
时间复杂度的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁如何删除单链表中的重复结点?
[问题点数:50分,结帖人mlsg]
如何删除单链表中的重复结点?
[问题点数:50分,结帖人mlsg]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
本帖子已过去太久远了,不再提供回复功能。删除节点运算在双链表上找到删除位置的前一个节点,由p指向他,q指向要删除的节点。(为什么q要指向要删除_百度知道
删除节点运算在双链表上找到删除位置的前一个节点,由p指向他,q指向要删除的节点。(为什么q要指向要删除
提问者采纳
c,next指向c节点。e=q-&gt,q-&gt, return OK,prior=q-prior,双向链表的节点由3部分组成的,q-&gt,next,,
(使a的后继指向c)q-&gt,前趋-数据-后继。删除节点的操作如下,q指向要删除节点b,prior指向a节点,则q-&gt,next=q-&gt,设3个节点a,b,data,
(使c的前趋指向a)free(q),next-&gt,prior-&gt,
提问者评价
虽然您说的我们看懂,不过不好意思,我已经懂了!
其他类似问题
双链表的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁一个带头结点的单链表,L为链表的头指针,设计算法删除链表中的偶数结点!_百度知道
一个带头结点的单链表,L为链表的头指针,设计算法删除链表中的偶数结点!
是数据结构C语言
提问者采纳
/*1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16删除偶数结点后 :1 3 5 7 9 11 13 15Press any key to continue*/#include&stdio.h&#include&malloc.h&typedef struct LNode {
struct LNode *}*LinkLLinkList Creat_List(int n) { LinkList head,p,q;
head = p = (LinkList)malloc(sizeof(LNode));
for(int i = 1; i &= i++) {
q = (LinkList)malloc(sizeof(LNode));
p = } p-&next = NULL; }void Delete_evenLNode(LinkList head) { // 删除偶数位结点
LinkList q,p =
for(i = 1; p-& ++i) {
if(i % 2 == 0) {
p-&next = q-&
else p = p-& }}void Print_List(LinkList head) { LinkList p = head-& while(p != NULL) {
printf(&%d &,p-&data);
p = p-& } printf(&\n&);}void main () {
LinkList head = Creat_List(16); Print_List(head); Delete_evenLNode(head); printf(&删除偶数结点后 :\n&); Print_List(head);}
其他类似问题
单链表的相关知识
其他1条回答
LinkList deleteEvenNode(LinkList *head){
if (head != 0 && !head.isEmpty())
int nIndex = 1;
LinkNode *curNode =
while (curNode != 0 && curNode-&next != 0)
LinkNode *nextNode = curNode-&
if (nIndex % 2 == 0)
curNode -&next = node-&
curNode = node-&
}}希望对你有所帮助。
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 链表逆序 的文章

 

随机推荐