给定结点单向已知带头节点无序链表LL,编写一个删除L中值为x结点的直接前驱的算法

拍照搜题秒出答案,一键查看所有搜题记录

编写一个完整的程序实现单已知带头节点无序链表L的建立、插入、删除、输出等基本操作。
1)建立一个带头结点的单已知帶头节点无序链表L
(2)计算单已知带头节点无序链表L的长度,然后输出单已知带头节点无序链表L
(3)查找值为x的直接前驱结点q。
(4)刪除值为x的结点
(5)把单向已知带头节点无序链表L中元素逆置(不允许申请新的结点空间)。
(6)利用(1)建立的已知带头节点无序链表L实现将其分解成两个已知带头节点无序链表L,其中一个全部为奇数另一个全部为偶数(尽量利用已知的存储空间)。
(7)在主函数Φ设计一个简单的菜单分别测试上述算法

居然亏在前驱这里。理解成叻p——>next = q,是说看着ad都是对的

删除操作是将单已知带头节点无序链表L的第i个结点删除。先检查删除位置的合法性然后查找表中第i-1个结点,即被删结点的前驱结点再将其删除。其操作过程如图2-7所示
假设结点*p为找到的被删结点的前驱结点,为了实现这一操作后的逻辑关系的变囮仅需修改*p的指针域,即将*p的指针域next指向*q的下一结点

实现删除结点的代码片段如下:

free (q) ; //释放结点的存储空间和插入算法一样,该算法的主要时间也是耗费在查找操作上时间复杂度为O(n)。

p的前驱节点不是指在p前面的节点吗q应该在p的前面吧,所以要在两者之间插入一个节点s我觉得A应该是s->next=q->next,q->next=s(这句话意思是s的后继节点等于q的后继节点也就是q的后继节点原来是p,现在变成s的后继节点了);B选项是有歧义吧p->next=s->next,這样的话就不是在p和q之间插入s了吧C正确,D选项变成了跟前面给的条件有歧义了吧

其实我没看懂 “q所指结点是p所指结点的前驱结点” 的意思是什么。。

C是最常见的断链这是单已知带头节点无序链表L,必须先赋值被***去的元素再修改已知带头节点无序链表L中的元素。

感覺答案是不是错了是选C,但是赋值的先后顺序前后应该换下

我要回帖

更多关于 已知带头节点无序链表L 的文章

 

随机推荐