网友您好, 请在下方输入框内输入要搜索的题目:
题目内容
(请给出正确答案)
3、试写一算法,对单链表实现就地逆置。
参考答案和解析
答:将原连表中的头节点和第一个元素结点断开,先构成一个新的空表,然后将原链表中各节点,从第一个结点起插入这个新表的头部。//链表的就地逆置;为简化算法,假设表长大于 2void LinkList reverse(Linklist &L)//定义q为p的后继,s为q的后继\mathrm{p}=\mathrm{L}\to \mathrm{n}\mathrm{e}\mathrm{x}\mathrm{t};\mathrm{q}={\mathrm{p}}^{-}\mathrm{m}\mathrm{e}\mathrm{x}\mathrm{t}\mathrm{s}\mathrm{s}\mathrm{q}\mathrm{q}.\mathrm{n}\mathrm{e}\mathrm{x}\mathrm{t}\mathrm{p}\mathrm{p}\space \mathrm{p}\mathrm{e}\mathrm{x}\mathrm{t}=\mathrm{N}\mathrm{U}\mathrm{L}\mathrm{L};while(\space \mathrm{s}\to \space \mathrm{e}\mathrm{e}\mathrm{x}\mathrm{t}){{\mathrm{q}}^{-}\mathrm{n}\mathrm{e}\mathrm{x}\mathrm{t}=\mathrm{p};\mathrm{p}=\mathrm{q};q=ss=->next;∥把L的元素逐个插入新表表头}q>next=p: s->nextaq: L->next=s;JninkList_reverse
更多 “3、试写一算法,对单链表实现就地逆置。” 相关考题
考题
在单链表中,增加头结点的目的是( )。A.方便运算的实现B.使单链表至少有一个结点
在单链表中,增加头结点的目的是( )。A.方便运算的实现B.使单链表至少有一个结点C.标识表结点中首结点的位置D.说明单链表是线性的链式存储实现
考题
在单链表中,增加头结点的目的是( )。 A.方便运算的实现B.使单链表至少有一个结点SXB
在单链表中,增加头结点的目的是( )。A.方便运算的实现B.使单链表至少有一个结点C.标识表结点中首结点的位置D.说明单链表是线性表的链式存储实现
考题
阅读以下说明和C函数,填补代码中的空缺,将解答填入答题纸的对应栏内。
[说明]
函数ReverseList(LinkList headptr)的功能是将含有头结点的单链表就地逆置。处理思路是将链表中的指针逆转,即将原链表看成由两部分组成:已经完成逆置的部分和未完成逆置的部分,令s指向未逆置部分的第一个结点,并将该结点插入已完成部分的表头(头结点之后),直到全部结点的指针域都修改完成为止。
例如,某单链表如图1所示,逆置过程中指针s的变化情况如图2所示。
链表结点类型定义如下:
typedef struct Node{ int data; Struct Node *next; }Node,*LinkList; [C函数] void ReverseList(LinkList headptr) { //含头结点的单链表就地逆置,headptr为头指针 LinkList p,s; if(______) return; //空链表(仅有头结点)时无需处理 P=______; //令P指向第一个元素结点 if(!P->next) return; //链表中仅有一个元素结点时无需处理 s=p->next; //s指向第二个元素结点 ______ =NULL; //设置第一个元素结点的指针域为空 while(s){ p=s; //令p指向未处理链表的第一个结点 s= ______; p->next=headptr->next; //将p所指结点插入已完成部分的表头 headptr->next= ______; } }
考题
在具有n个结点的单链表中,实现()的操作,其算法的时间复杂度都是O(n)。A.遍历链表和求链表的第i个结点
B.在地址为P的结点之后插入一个结点
C.删除开始结点
D.删除地址为P的结点的后继结点
考题
问答题设某带头结头的单链表的结点结构说明如下:typedef struct nodel{int data struct nodel*next;}node;试设计一个算法:void copy(node*headl,node*head2),将以head1为头指针的单链表复制到一个不带有头结点且以head2为头指针的单链表中。
考题
问答题编写算法,将一个头指针为head不带头结点的单链表改造为一个单向循环链表,并分析算法的时间复杂度。
热门标签
最新试卷