文章

63

粉丝

0

获赞

0

访问

3.2k

头像
2019年计算机学科专业基础综合试题 - 第41题回答
数据结构
发布于2025年10月31日 00:24
阅读数 41

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分

理由:学生基本理解了算法的三个步骤:使用快慢指针找中点、反转后半部分链表、合并两个链表。但描述不够...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发