首页 > 其他分享 >143. Reorder List(好)

143. Reorder List(好)

时间:2022-12-01 20:10:59浏览次数:56  
标签:p2 head p1 ListNode 143 List next 链表 Reorder


L: L0→L1→…→Ln-1→Ln,
reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→…

You must do this in-place without altering the nodes' values.

For example,

Given ​​{1,2,3,4}​​, reorder it to ​​{1,4,2,3}​​.


​Subscribe​​ to see which companies asked this question

这是一道比较综合的链表操作的题目,要按照题目要求给链表重新连接成要求的结果。其实理清思路也比较简单,分三步完成:

(1)将链表切成两半,也就是找到中点,然后截成两条链表;

(2)将后面一条链表进行reverse操作,就是反转过来;

(3)将两条链表按顺序依次merge起来。

/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
void reorderList(ListNode* head) {
if (head == NULL || head->next == NULL) return;
ListNode* faster = head;
ListNode* slower = head;
while (faster->next&&faster->next->next){
faster = faster->next->next;
slower = slower->next;
}
ListNode* head2 = slower->next;
slower->next = NULL;

ListNode* pre = NULL;
while (head2){
ListNode* next = head2->next;
head2->next = pre;
pre = head2;
head2 = next;
}

ListNode* p1 = head->next, *p2 = pre;
ListNode* p = head;

int cnt = 1;
while (p1&&p2){
if (cnt & 1){
p->next = p2;
p2 = p2->next;
}
else{
p->next = p1;
p1 = p1->next;
}
cnt++;
p = p->next;
}

if (p1){
p->next = p1;
}
if (p2){
p->next = p2;
}

}

};



标签:p2,head,p1,ListNode,143,List,next,链表,Reorder
From: https://blog.51cto.com/u_15899184/5904037

相关文章

  • 148. Sort List(重要)
    Sortalinkedlistin O(n log n)timeusingconstantspacecomplexity.用归并排序!相似的题目147.InsertionSortLi/***Definitionforsingly-linkedlist.*st......
  • List集合转换成数组
    我现在有个需求:将File集合转换成MultipartFile数组结构然后我就开始在网上开启了List转换到数组之旅。首先来看一个例子ArrayList<String>list=newArrayList<......
  • iOS学习之 plist文件的读写
    在做iOS开发时,经常用到到plist文件, 那plist文件是什么呢?它全名是:PropertyList,属性列表文件,它是一种用来存储串行化后的对象的文件。属性列表文件的扩展名为.plist ,因此......
  • list定义与方法使用
    #一、list列表#语法:[元素,元素,...]#1.定义一个listmy_list=['杰伦','学友','德华']print(my_list)print(type(my_list))#2.定义一个嵌套listmy_list=[[1,2,3],[4......
  • delphi 让TActionList中的sender指向事发对象
    故事这样的:我有一批按钮需要共同一个点击事件,本来是按最普通的方法,批选了这些按钮,然后双击click事件,然后写代码,最主要的是这句:iTag:=TControl(Sender).Tag;......
  • list、dict和set的综合应用:排课系统(4)
    上回说到,我们成功的实现了排课算法并且生成了课表,这次我们就尝试在首页显示课表,并且实现调用排课的认证。显示课表显示课表非常的简单,在视图中返回的context字典中只有一......
  • list 和 dict 的复制
    我们都知道,Python中有两种可变的数据类型:list和dict。这两种数据类型对应的实例也有很多方法可以对自身进行修改,需要注意的是,这里调用修改相关的方法的时候不是返回修改......
  • list、dict和set的综合应用:排课系统(2)
    差一点我们就擦肩而过了有趣有用有态度上回说到,我们主要实现了排课系统的后台数据的定义以及每个数据对象之间的关系,这一次我们就来批量增加一些数据,为了给后面的排课算法进......
  • list、dict和set的综合应用:排课系统(1)
    差一点我们就擦肩而过了有趣有用有态度我们都知道一个程序从本质上来说就是算法+数据结构,这次就以我的本科毕业设计——排课系统为例,专门讲解如何设计排课的算法和要用到的......
  • MFC--List列表控件
           ......