字节跳动高频题——排序奇升偶降链表
面经描述
链表,奇数位置按序增长,偶数位置按序递减,如何能实现链表从小到大?(2020.10 字节跳动-后端)[2]
奇偶生序倒序链表的重新排序组合,例如:18365472(2020.08 字节跳动-后端)[3]
1->4->3->2->5 给定一个链表奇数部分递增,偶数部分递减,要求在O(n)时间复杂度内将链表变成递增,5分钟左右(2020.07 字节跳动-测试开发)[4]
奇数位升序偶数位降序的链表要求时间O(n)空间O(1)的排序?(2020.07 字节跳动-后端)[5]
题目描述
给定一个奇数位升序,偶数位降序的链表,将其重新排序。
输入: 1->8->3->6->5->4->7->2->NULL
输出: 1->2->3->4->5->6->7->8->NULL
思路
https://mp.weixin.qq.com/s/377FfqvpY8NwMInhpoDgsw
在该篇文中中
三个题的结合
1.合并两个有序连接表
2 奇偶链表拆分
3 反转链表
代码 C++实现
// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <string.h>
#include<iostream>
using namespace std;
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {
}
};
ListNode*reverse(ListNode*head)
{
if (head == NULL) return NULL;
ListNode*cur = head;
ListNode*left = NULL;
ListNode*right = NULL;
ListNode*preHead = NULL;
while (cur