简答题

编写算法,将一个头指针为head不带头结点的单链表改造为一个单向循环链表,并分析算法的时间复杂度。

正确答案

voidlinklist_c(Lnode*heaD.
{Lnode*p;p=head;
if(!p)returnERROR;
while(p->next!=NULL)
p=p->next;
p->next=head;
}
设单链表的长度(数据结点数)为N,则该算法的时间主要花费在查找链表最后一个结点上(算法中的while循环),所以该算法的时间复杂度为O(N)。

答案解析

相似试题
  • 设某带头结头的单链表的结点结构说明如下:typedef struct nodel{int data struct nodel*next;}node;试设计一个算法:void copy(node*headl,node*head2),将以head1为头指针的单链表复制到一个不带有头结点且以head2为头指针的单链表中。

    简答题查看答案

  • 设一个带头结点的单向链表的头指针为head,设计算法,将链表的记录,按照data域的值递增排序。

    简答题查看答案

  • 假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(注意不设头指针),试编写相应的队列初始化、入队列何处队列的算法。

    简答题查看答案

  • 头指针为head的带头结点的单向循环链表,p所指向尾结点,要使该链表成为不带头结点的单向循环链表, 可执行head=head->nex;和()。

    单选题查看答案

  • 设有头指针为head的不带头结点的非空的单向循环链表,指针p指向其尾结点,要删除第一个结点,则可利用下述语句 head=head->next;和()。

    单选题查看答案

  • 头指针为head的不带头结点的单向链表为空的判定条件是逻辑表达式()为真。

    单选题查看答案

  • 设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(不设头指针),试编写相应的入队列、出队列算法。

    简答题查看答案

  • 已知head指向一个带头节点的单向链表,链表中每个节点包含数据区域(data)和指针域(next),数据域为整型。请分别编写函数,在链表中查找数据域值最大的节点。

    简答题查看答案

  • 在一个头指针为head的单向链表中,p指向尾结点,要使该链表成为单向循环链表可执行()。 

    单选题查看答案