zoukankan      html  css  js  c++  java
  • [leetcode]143. Reorder List

    Given a singly linked list LL0→L1→…→Ln-1→Ln,
    reorder it to: L0→LnL1→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}.

    看上去有点难,实际上可以分为几个步骤。

    1.找到中间节点。划分为两个链表。(算法总结里有)

    2.把后半部分链表反转。(算法总结里有)

    3.合并两个链表。(递归)

     1 /**
     2  * Definition for singly-linked list.
     3  * struct ListNode {
     4  *     int val;
     5  *     ListNode *next;
     6  *     ListNode(int x) : val(x), next(NULL) {}
     7  * };
     8  */
     9 class Solution {
    10 public:
    11     ListNode* ReverseList(ListNode* head){
    12     if(head==NULL||head->next==NULL)
    13         return head;
    14     ListNode* p=head->next,*q=head,*l=head;
    15     while(p->next!=NULL){
    16         l=p->next;
    17         p->next=q;
    18         q=p;
    19         p=l;
    20     }
    21     p->next=q;
    22     head->next=NULL;
    23     return p;
    24 }
    25 ListNode* Merge(ListNode* l1,ListNode* l2){
    26     if(l1==NULL)
    27         return l2;
    28     if(l2==NULL){
    29         l1->next=NULL;
    30         return l1;
    31     }
    32     ListNode* p=l1,*q=l2;
    33     l1=l1->next;
    34     l2=l2->next;
    35     p->next=q;
    36     q->next=Merge(l1,l2);
    37     return p;
    38 }
    39     void reorderList(ListNode* head) {
    40         if(head==NULL||head->next==NULL)
    41             return;
    42         ListNode* p=head,*q=head,*bf=NULL;
    43         while(p&&p->next!=NULL){
    44             p=p->next->next;
    45             bf=q;
    46             q=q->next;
    47     }
    48     bf->next=NULL;
    49     q=ReverseList(q);
    50     Merge(head,q);
    51     return;
    52     }
    53 };
  • 相关阅读:
    【持久化框架】Mybatis与Hibernate的详细对比
    [Linux] day03——REHL部署
    [Linux] day02——什么是Linux
    [Linux] day01——运维
    java也可以做出很漂亮的界面
    python的沙盒环境--virtualenv
    Java虚拟机(JVM)中的内存设置详解
    高手教大家如何配置JVM参数
    最全的静态网站生成器(开源项目)
    Java 8 简明教程
  • 原文地址:https://www.cnblogs.com/LUO77/p/5672007.html
Copyright © 2011-2022 走看看