参考答案和解析
参考答案:
  从首元结点开始,逐个地把链表L的当前结点p插入新的链表头部。
  [算法描述]
  void inverse(LinkList &L)
  {// 逆置带头结点的单链表 L
  p=L->next; L->next=NULL;
  while ( p) {
  q=p->next; // q指向*p的后继
  p->next=L->next;
  L->next=p; // *p插入在头结点之后
  p = q;
  }
  }
更多“设计一个算法,通过遍历一趟,将链表中所有结点的链接方向逆转,仍利用原表的存储空间。 ”相关问题
  • 第1题:

    设带头结点的单链表(L为头指针)中的数据元素递增有序。设计算法,将x插入到链表的适当位置上,并仍保持该表的有序性。


    参考答案:

  • 第2题:

    试设计一个结点数据类型为整型的带表头结点的有序单链表,然后设计一个算法,该算法将这个有序单链表划分成两个单链表,使得第一个单链表中包含原单链表中所有数值为奇数的结点,第二个单链表中包含原单链表中所有数值为偶数的结点,且两个单链表中结点的相对排列顺序与原单链表中相同。 【要求】要求使用原单链表的空间,表头结点可以另辟空间。 【提示】请先在自己的稿纸上作答,然后将全部答题过程及所得结果拍照,以图片形式作为附件上传。请确保照片中的字迹足够清晰、解答过程完整。


    D解析:若要删除结点需要改变尾指针的指向。

  • 第3题:

    1、有两个递增有序表,所有元素为整数,均采用带头结点的单链表存储,结点类型定义如下: typedef struct node { int data; struct node *next; } LinkNode; 设计一个尽可能高效的算法,将两个递增有序单链表ha、hb合并为一个递减有序单链表hc,要求算法空间复杂度为O(1)。


    A

  • 第4题:

    线性表采用单循环链表存储的主要优点是( )

    A.从表中任一结点出发都能遍历整个链表

    B.可直接荻取指定结点的直接前驱和直接后继结点

    C.在进行删除操作后,能保证链表不断开

    D.与单链表相比,更节省存储空间

    答案:A
    解析:

  • 第5题:

    计一个算法,通过遍历一趟,将带头结点链表中所有结点的链接方向逆转,仍利用原表的存储空间。 [题目分析] 从首元结点开始,逐个地把链表L的当前结点p插入新的链表头部。 void inverse(LinkList &L) {……}


    void inverse(LinkList &L){// 逆置带头结点的单链表 Lp=L->next; L->next=NULL;while ( p) {q=p->next; // q指向*p的后继p->next=L->next;L->next=p; // *p插入在头结点之后p = q;}}