王道数据结构课后题
m0_54822271
这个作者很懒,什么都没留下…
展开
-
单链表就地逆置
第一种:将整个链表一分为二(一个小链表,一个大链表),小链表包括头结点和首元结点,大链表是除这两个结点之外的整个链表的结点。(前提这不是空表。可以只看王道的代码不看这种)从后面的大链表中依次取出一个结点头插法插入小链表中直至取完所有结点。注:我们需要声明两个指针s和b,s初期用来将链表分为两个,后期用来做工作指针。b用来保存和更新大链表的每个结点的地址初始操作:声明指针s指向首元结点,声明指针b指向首元结点的后继结点(即保存了大链表的第一个结点地址),然后将首元结点的next指针置位NULL。这样我们原创 2021-05-30 12:39:50 · 629 阅读 · 0 评论 -
在带头结点的单链表L中,删除所有值为x的结点,并释放其空间
第一种遍历整个L,遇到data为x就删除,需要三个指针,pre初始值指向头结点,保持指向为p的前驱结点。p指向首元结点,用来遍历整个链表。q用来做删除结点操作指针Del_x(Linklist &L,Elemtype x){ Lnode *p=L->next,*pre=L,*q; while(p!=NULL){ if(p->data==x){ q=p; // q指向该结点 p=p->next; pre->next=p原创 2021-05-26 14:18:42 · 1166 阅读 · 0 评论 -
递归删除不带头结点的单链表L中所有值为x的结点
void Del_X_3(LinkList &L,ElemType x){LNode *p; //p指向待删除结点,if(L==NULL) //递归出口 return ; if(L->data==x) { p=L; L=L->next; //删除L,并让L指向下一结点 free(p); Del_X_3(L,x); }else { Del_X_3(L->next,x);//递归调用 }原创 2021-05-26 13:44:50 · 608 阅读 · 1 评论