数据结构单链表的逆置算法,将单链表逆置的算法
- 开发语言
- 2023-08-13
- 78
大家好,今天来为大家分享数据结构单链表的逆置算法的一些知识点,和将单链表逆置的算法的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概...
大家好,今天来为大家分享数据结构单链表的逆置算法的一些知识点,和将单链表逆置的算法的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!
链表的就地逆置是什么意思
比如说链表a->b->c->d表头是a,表尾是d。就地逆置的意思就是变成:a<-b<-c<-da变成表尾,d变成表头假设structLINK{intvalue;structLINK*next;};structLINKa,b,c,d;a->next=&b;b->next=&c;c->next=&d;d->next=0;逆置后:b->next=&a;c->next=&b;d->next=&c;a->next=0;所谓就地逆置,就是在操作中,遇到a->next=&b;的情况,那么改写为b->next=&a;
单链表就地逆置有几种方法
单链表就地逆置的两种(递归与普通循环)1.用递归算法,对于不带头结点的单链表(a1,a2,a3,a4,a5,a6)逆置后的结果为(a6,a5,a4,a3,a2,a1)考虑递归算法,若只有一个结点,则直接返回,若存在两个结点(a1,a2)则需要做的操作有:a2->next=a1;a1->next=NULL;returna2;a2即新的头结点,若有三个结点,则应先将子链(a2,a3)先逆置且返回该子链的新的头结点,然后把子链(a2,a3)当作一个复合结点a2',组成新的二元组(a1,a2')然后就可以执行前面相同的操作:a2'->next=a1;a1->next=NULL;returna3';即可,多个以上的结点可同理得到,Node*Reverse(Node*head){Node*p=head;if(p==NULL)returnNULL;//若是空链表,返回空Node*q=p->next;if(q==NULL)returnp;//若只有一个结点,直接返回elsehead=Reverse(q);//记录子序列的新的头结点q->next=p;//当前结点与已经逆置的子序列看成是前后的两个结点p,q,作相应的逆置操作p->next=NULL;returnhead;//返回新的子序列的头结点}2.用普通算法循环逆置(头插法重新建立带头结点的新链表)Node*Reverse(Node*head){Node*p=head->next;if(p)//若链表不为空,则逆置,否则,空操作{Node*q=p->next;head->next=NULL;//头结点分离while(p){p->next=head->next;//头插法建立链表head->next=p;if(q)//操作空指针的时候一定要非常注意,很容易出错{p=q;q=p->next;}elsebreak;}}returnhead;}
借助栈结构,编写实现单链表逆置算法!用PDL语言写
#include<stdio.h>#include<stdlib.h>typedefstruct_LinkList{struct_LinkList*next;}LinkList;LinkList*ReverseList_L(LinkList*head){LinkList*prior,*cur,*next,*temp;prior=NULL;cur=head;next=head->next;while(next!=NULL){cur->next=prior;temp=next->next;next->next=cur;prior=cur;cur=next;next=temp;}returncur;
}intmain(void){LinkListn1,n2,n3,n4;n1.next=&n2;n2.next=&n3;n3.next=&n4;n4.next=NULL;ReverseList_L(&n1);return0;
}为什么最近这么多人问这个?
难道都是一个学校的?
单链表反向输出
求单链表中的一个最小值
单链表逆置 L为带头结点的单链表,实现从尾到头反向输出每个结点值 递归删去不带头结点的单链表中所有值为x的结点 无序链表中删除所有值为x的结点并释放其空间 带头结点的单链表中删除所有介于给定的两个值之间的元素 带头结点的单链表中删除一个最小值结点 对带头结点的单链表L,设计一个算法使其元素递增有序 按递增次序输出单链表中各节点的数据元素,并释放结点所站的存储空间什么是单链表的逆置
比如说链表a->b->c->d表头是a,表尾是d。就地逆置的意思就是变成:anext=&b;b->next=&c;c->next=&d;d->next=0;逆置后:b->next=&a;c->next=&b;d->next=&c;a->next=0;所谓就地逆置,就是在操作中,遇到a->next=&b;的情况,那么改写为b->next=&a;
十字链表的适用性
十字链表(OrthogonalList)是有向图的另一种链式存储结构。该结构可以看成是将有向图的邻接表和逆邻接表结合起来得到的。用十字链表来存储有向图,可以达到高效的存取效果。同时,代码的可读性也会得到提升
关于本次数据结构单链表的逆置算法和将单链表逆置的算法的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。
本文链接:http://xinin56.com/kaifa/8533.html