题解 | #按照左右半区的方式重新组合单链表#

按照左右半区的方式重新组合单链表

http://www.nowcoder.com/practice/a7a348bdb4634e228cf7704c8a2a8bda

# include <bits/stdc++.h>
using namespace std;

struct list_node{
    int val;
    struct list_node * next;
};


list_node * input_list(void)
{
    int n, val;
    list_node * phead = new list_node();
    list_node * cur_pnode = phead;
    scanf("%d", &n);
    for (int i = 1; i <= n; ++i) {
        scanf("%d", &val);
        if (i == 1) {
            cur_pnode->val = val;
            cur_pnode->next = NULL;
        }
        else {
            list_node * new_pnode = new list_node();
            new_pnode->val = val;
            new_pnode->next = NULL;
            cur_pnode->next = new_pnode;
            cur_pnode = new_pnode;
        }
    }
    return phead;
}
list_node * relocate(list_node * head)
{
    //////在下面完成代码
    if(head==NULL||head->next==NULL||head->next->next==NULL)
        return head;
//找到中间节点把链表分成左半区和右半区
    list_node*fast=head->next,*slow=head;//快慢指针
    while(fast->next&&fast->next->next){
        fast=fast->next->next;
        slow=slow->next;
    }
    //此时slow指的就是左半区的最后一个节点
    list_node*newHead=slow->next;
    slow->next=NULL;
    list_node*resHead=new list_node,*p=resHead;
    p->next=NULL;
    list_node*next1=NULL,*next2=NULL;
    while(head&&newHead){
        next1=head->next;
        next2=newHead->next;
        p->next=head;
        p=p->next;
        p->next=newHead;
        p=p->next;
        head=next1;
        newHead=next2;
    }
    if(newHead){
        p->next=newHead;
        p=p->next;
        p->next=NULL;
        return resHead->next;
    }
    p->next=NULL;
    return resHead->next;
}


void print_list(list_node * head)
{
    while (head != NULL) {
        printf("%d ", head->val);
        head = head->next;
    }
    puts("");
}


int main ()
{
    list_node * head = input_list();
    list_node * new_head = relocate(head);
    print_list(new_head);
    return 0;
}
全部评论

相关推荐

03-11 23:33
已编辑
曲阜师范大学 后端工程师
牛客68808588...:果真开发过12306购票系统吗,这不是一眼就被看穿了
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
正在热议
更多
# 春招至今,你的战绩如何? #
10946次浏览 94人参与
# 你的实习产出是真实的还是包装的? #
1942次浏览 42人参与
# MiniMax求职进展汇总 #
24100次浏览 309人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7623次浏览 43人参与
# 简历第一个项目做什么 #
31733次浏览 339人参与
# 重来一次,我还会选择这个专业吗 #
433525次浏览 3926人参与
# 米连集团26产品管培生项目 #
6022次浏览 216人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187188次浏览 1122人参与
# 牛客AI文生图 #
21445次浏览 238人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152434次浏览 888人参与
# 研究所笔面经互助 #
118956次浏览 577人参与
# 简历中的项目经历要怎么写? #
310336次浏览 4217人参与
# AI时代,哪些岗位最容易被淘汰 #
63796次浏览 826人参与
# 面试紧张时你会有什么表现? #
30508次浏览 188人参与
# 你今年的平均薪资是多少? #
213126次浏览 1039人参与
# 你怎么看待AI面试 #
180113次浏览 1258人参与
# 高学历就一定能找到好工作吗? #
64331次浏览 620人参与
# 你最满意的offer薪资是哪家公司? #
76532次浏览 374人参与
# 我的求职精神状态 #
448117次浏览 3129人参与
# 正在春招的你,也参与了去年秋招吗? #
363485次浏览 2638人参与
# 腾讯音乐求职进展汇总 #
160670次浏览 1112人参与
# 校招笔试 #
471103次浏览 2964人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务