ToB企服应用市场:ToB评测及商务社交产业平台

标题: 有一个线性表,采用带头结点的单链表L来存储,设计一个算法将其逆置,且不 [打印本页]

作者: 小小小幸运    时间: 2022-9-16 17:19
标题: 有一个线性表,采用带头结点的单链表L来存储,设计一个算法将其逆置,且不
有一个线性表,采用带头结点的单链表L来存储,设计一个算法将其逆置,且不能建立新节点,只能通过表中已有的节点的重新组合来完成。

分析:线性表中关于逆序的问题,就是用建立链表的头插法.而本题要求不能建立新结点,也就不能把元素重新弄到一个表中.可以将L中的元素作为逆转后的L的元素来源,将L->next设置为空.然后将头结点后的一串结点用头插法逐个插入L中.

伪代码:
  1. void reversel(LNode *L)
  2. {
  3.     LNode *p=L->next, *q;
  4.     L->next=NULL;            //置为空
  5.     while(p!=NULL)
  6.     {
  7.         q=p->next;           //q记录p的直接后继结点的位置
  8.         p->next=L->next;
  9.         L->next=p;
  10.         p=q;
  11.     }
  12. }
复制代码
cue:
1.LNode *p, *q;

并不是建立新结点,它们只是存储地址的变量.(我第一次遇到这个问题时没弄懂,以为这两是定义了新的结点.其实不是.)
2LNode *A=(LNode*)malloc(sizeof(LNode));

才是用户分配了一片LNode型空间,也就是构造了一个LNode型结点.这时候定义了名为A的指针来指向这个结点,同时我们也把A也当做这个结点的名字.这里A命名了两个东西,一个是结点,一个是指向这个结点的指针.
指针变量自身的存储空间是系统分配的,不需要用户调用函数free()释放,只有用户分配的存储空间才需要用户自己来释放.

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4