文章
63
粉丝
0
获赞
0
访问
3.2k
1.先用快慢指针遍历链表,此时慢指针遍历到链表的中间位置,然后把后半部分的链表逆序,最后再用两个指针,一个从链表头,一个从逆序后的链表中间,交叉连接起来就形成了最后的链表结构
void func(LinkList *head){
LNode *fast=head;
LNode *slow=head;
//初始化快慢指针
while(fast!=null){
fast = fast.next.next;
slow = slow.next;
}
// 逆序后半链表
LNode *q = slow.next;
slow.next = null;
while(q!=null){
LNode *r = q.next;
q.next = slow.next;
slow.next = q;
q=r;
}
LNode *head1 = head.next;
LNode *head2 = slow.next;
slow.next=null;
// 合并前半个和后半个链表
while(head2!=null){
LNode *h1 = head1.next;
head1.next = head2;
h1 = head1;
LNode *h2 = head2.next;
head2.next = head1;
h2 = head2;
}
}
3.时间复杂度为O(n)
评分及理由
(1)得分及理由(满分3分)
得分:2分
理由:学生基本理解了算法的三个步骤:使用快慢指针找中点、反转后半部分链表、合并两个链表。但描述不够...
登录后发布评论
暂无评论,来抢沙发