文章

87

粉丝

0

获赞

1

访问

17.2k

头像
2019年计算机学科专业基础综合试题 - 第41题回答
数据结构
发布于2025年8月21日 22:44
阅读数 51

(1)输出链表可以视作为链表的前半段,与逆置的链表后半段进行逐个合并的结果,所以将链表后半段进行你只,设置pq两指针,p走一步,q走两步,q到末尾时,p刚好在链表中间,设前半段头节点为head1,后半段为head2,合并时的链表为head3,利用head3将head1与head2依次合并即可

(2) 
NODE head1;

head1= (node*)malloc(sizeof(NODE))

node* p=head1;

node*q=head1;

node* head2=head3=NULL;
While(q->next)
{

p=p->next;

q=q->next->next;
}

head2=p;

beg=p->next;end=p->next->next;
while(end)//后半段链表逆置
{
beg->next=end->next;

end->next=head2->next;

head2->next=end;

end=beg->next;
}

node* p3=head3;
While(head2)//合并链表
{
  p3->next=head1->next;

head1=head1->next;
p3=p3->next;

p3->next=head2->next;

head2=head2->next;

p3=p3->next;
}
(3)查询p指针时间复杂度为O(n),逆置为O(n),合并为O(n),总共时间复杂度为O(n)


评分及理由

(1)得分及理由(满分3分)

学生作答的基本设计思想正确:通过快慢指针找到链表中点,将后半段反转,然后合并前后两段。思路与标准答案一致,表述清晰。得3分。

(2)得分及理由(满分8分)

学生提供了代码实现,但存在多处逻辑错误和语法问题:
1. 代码未使用带头结点的单链表,直接操作head1,但head1未初始化(head1= (node*)malloc(sizeof(NODE)) 应为 head1->next = NULL,...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发