题解 | #重排链表#

重排链表

https://www.nowcoder.com/practice/3d281dc0b3704347846a110bf561ef6b

/**
 * struct ListNode {
 *  int val;
 *  struct ListNode *next;
 * };
 */

/**
 *
 * @param head ListNode类
 * @return  void
 */

void reorderList(struct ListNode* head ) {
    // write code here

    printf("fxs =>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\r\n");
    struct ListNode* p1 = head;
    struct ListNode* p2 = head->next;
    struct ListNode* temp = NULL;
    struct ListNode* tempsecond = NULL;
    struct ListNode* p =
            p1->next;  //bug1 : 这里为了应对{1,2,3},之前我令p=p2->next了。
    int count = 0;
    if (p1 == NULL || p2 == NULL || p2->next == NULL) {
        printf("fxs ====>\r\n");
        return;
    }

    while (p1 != NULL && p2 != NULL) {
        if (p2->next == NULL) { //bug2 : {1,2} 或者 {1,2,3,4}
            return;
        }
        while (p != NULL && p->next != NULL) {
            temp = p;
            p = p->next;
        }
        count++;
        printf("count = %d, p->val = %d\r\n", count, p->val);
        //此时P就是最后一个节点,temp是最后一个节点。
        temp->next = NULL;
        //将节点插入p1和p2两个节点中间。
        p1->next = p;
        p->next = p2;
        //将p1和p2都往后移动,但是注意p1应该指向p2,而不是p2后面的节点。
        p1 = p2;
        p2 = p2->next;

        //这里有点问题,p没有更新   里面的循环每次都要更新才对
        p = p2;
    }
}

全部评论
链表问题遇到算是比较难的了把,记录一下,其实耐心想一下还是很简单的 ,但是需要调试一下毕竟有特殊情况考虑不全
点赞 回复 分享
发布于 2023-08-07 15:42 北京

相关推荐

01-14 12:08
门头沟学院 Java
神哥了不得:(非引流)1.既然发出来了简历,就稍微提一点点小建议,确实简历很不错了,练手项目可以换一些质量高的,工作内容,可以加上一些量化指标,比如第一条系统响应速度由多少变成多少,减少了百分之多少,第4条就很不错。2.广投,年前实习招募比较少了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务