设指针变量 p 指向单链表中结点 A ,若删除单链表中结点 A ,则需要修改指针的操作序列为( )。
q=p->next;p->data=q->data;p->next=q->next;free(q);
q=p->next;q->data=p->data;p->next=q->next;free(q);
q=p->next;p->next=q->next;free(q);
q=p->next;p->data=q->data;free(q);
因为找不到A前驱结点,直接删A就断开了,所以采用用后继结点将其覆盖,覆盖后后继结点就无用了,删除即可。
这是道垃圾题目。毫无意义的题目。首先工程上永远不会有这种删除操作。其次链表考察题目重点应该是边缘条件,比如我这个A是尾节点咋办?做链表题目大家肯定都会考虑假如头节点为空咋办?而且我们默认的删除操作只是在内存上进行,我们不应关心节点所存储的值是多少,而且实际上对节点存储值进行操作是很危险的行为。数据结构题目玩的应该是内存,而不是这样的所谓奇技淫巧。
分析:首先用指针变量q指向结点A的后继结点B,然后将结点B的值复制到结点A中,最后删除结点B。
这道题你会答吗?花几分钟告诉大家答案吧!
扫描二维码,关注牛客网
下载牛客APP,随时随地刷题