题解 | #排序奇升偶降链表#

排序奇升偶降链表

http://www.nowcoder.com/practice/3a188e9c06ce4844b031713b82784a2a

面试遇到这个题,要求只能通过链表操作来完成..... 两个0%,很服气 分两步: 1、通过原来链表的性质,区分成两个子链表,偶数位是降序的,可以在分子链表的时候排序(其实就是前插就行了) 2、对两个有序的链表进行合并...

 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 *	ListNode(int x) : val(x), next(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param head ListNode类 
     * @return ListNode类
     */
    ListNode* sortLinkedList(ListNode* head) {
        if (head == nullptr) {
            return nullptr;
        }
        ListNode* pre = head;
        ListNode* jHead = new ListNode(0);
        ListNode* oHead = new ListNode(0);

        //奇数位升序,偶数位降序, 返回升序
        ListNode* cur1 = jHead;
        int num = 1;
        while (pre) {
            if (num % 2 != 0) {
                ListNode* node = new ListNode(pre->val);
                cur1->next = node;
                cur1 = cur1->next;
            }
            else if (num % 2 == 0) { 
                ListNode* cur2 = oHead;
                ListNode* node = new ListNode(pre->val);
                if(cur2->next == nullptr){
                    cur2->next = node;
                }
                else {
                    ListNode* next = cur2->next;
                    cur2->next = node;
                    node->next = next;
                }
            }
            pre = pre->next;
            num++;
        }

        //两个有序链表合并

        ListNode* pre2 = oHead->next;
        while (pre2) {
            ListNode* pre1 = jHead->next;
            ListNode* cur = jHead;
            while (pre1) {
                if (pre2->val < pre1->val) {
                    ListNode* node = new ListNode(pre2->val);
                    cur->next = node;
                    node->next = pre1;
                    break;
                }
                if (pre1->next != nullptr) {
                    if ((pre2->val > pre1->val) && (pre2->val < pre1->next->val)) {
                        ListNode* next = pre1->next;
                        ListNode* node = new ListNode(pre2->val);
                        pre1->next = node;
                        node->next = next;
                        break;
                    }
                }
                else {
                    ListNode* node = new ListNode(pre2->val);
                    pre1->next = node;
                    node->next = nullptr;
                    break;
                }
                pre1 = pre1->next;
                cur = cur->next;
            }
            pre2 = pre2->next;
        }
        return jHead->next;
    }
};
全部评论
这题考得很全面啊,链表拆分,合并,翻转全考了
点赞 回复 分享
发布于 2022-09-06 11:20 天津

相关推荐

10-15 18:02
已编辑
香港中文大学 golang
秋招有幸一开始就拿了淘天的笔面,并且美团转正的意向也顺利通过后续在淘天和字节两个&nbsp;9&nbsp;月主要流程都走到了&nbsp;hr&nbsp;面,国庆节后一个通过,一个横向挂了其他面过的包括:b&nbsp;站一面挂&nbsp;八股还行,最后手撕给了个笔试压轴限时&nbsp;15min...整段垮掉阿里控股&nbsp;kpi一面➕换部门走到二面,控股的都不喜欢开摄像头京东一面挂&nbsp;常规问题,但是疑似成都&nbsp;base&nbsp;hc&nbsp;很少,并且透露了已经转正,目前池子里无人捞腾讯正在二面&nbsp;一面体验不错,还指出了要改进的地方,提示二面不会再问问过的问题快手一面未知小红书一面未知字节换部门一面不喜欢业务,又回到了人才库大麦约面,准备拒掉虾皮一面&nbsp;无后续流程,面试聊的还行,感觉上海&nbsp;base&nbsp;池子满了---------------------------------------------------------------------------感觉秋招可以结束了,后续感觉走完这个腾讯流程就随缘面面&nbsp;t&nbsp;和&nbsp;b,主包家在南京,奈何南京没啥好的民营企业和互联网氛围,以及好国企又太难进,不知道淘天这个意向够不够直接结束秋招了...今天去深圳&nbsp;nip&nbsp;主场看了一下入围赛,主队不是这两家,还是觉得&nbsp;ig&nbsp;可惜了,有很好的机会没有抓住。感触和我字节&nbsp;hr&nbsp;面挂一样评论区有推荐的字节杭州上海base的业务线或者有字节&nbsp;hr&nbsp;uu&nbsp;可以捞一下吗?
肖先生~:大佬都这么强了还要干啥啊
我的求职进度条
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务