• 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  * Definition for singly-linked list.
      3  * public class ListNode {
      4  *     int val;
      5  *     ListNode next;
      6  *     ListNode(int x) { val = x; }
      7  * }
      8  */
      9 public class Solution {
     10     public void reorderList(ListNode head) {
     11         
     12          
     13           if (head == null) 
     14             return;
     15           
     16           ListNode node = head.next;
     17           int len = 0;
     18           while(node != null){
     19               len ++;
     20               node = node.next;
     21           }
     22           
     23           System.out.println("len:"+len);
     24           
     25           if(len == 2){
     26               ListNode temp = head.next;
     27               
     28               head.next = temp.next;
     29               temp.next = null;
     30               head.next.next = temp;
     31               return;
     32           }else if(len == 1 || len == 0){
     33               return;
     34           }
     35           
     36           int isOdd = len % 2;
     37           if(isOdd == 1){
     38               int mid = len / 2 + 1;
     39               Stack<ListNode> stack = new Stack();
     40               
     41               int j = 1;
     42               ListNode midNode = head.next;
     43               while(j != mid){
     44                   j++;
     45                   midNode = midNode.next;
     46               }
     47               
     48               ListNode realMidNode = midNode;
     49               midNode = midNode.next;
     50               j++;
     51               stack.push(midNode);
     52               while(j != len){
     53                   j++;
     54                   midNode = midNode.next;
     55                   stack.push(midNode);
     56               }
     57               
     58               j = 1;
     59               
     60               ListNode leftTemp = head.next;
     61               ListNode rightTemp = stack.pop();
     62               rightTemp.next = leftTemp;
     63               head.next = rightTemp;
     64                ListNode tail = leftTemp;  
     65               j++;
     66               while(j < mid){
     67                   j++;
     68                   leftTemp = leftTemp.next;
     69                   rightTemp = stack.pop();
     70                   rightTemp.next = leftTemp;
     71                   tail.next = rightTemp;
     72                   tail = leftTemp;
     73               }
     74               
     75               tail.next = realMidNode;
     76               realMidNode.next = null;
     77               
     78           }else{
     79               int mid = len / 2 ;
     80               Stack<ListNode> stack = new Stack<>();
     81               
     82               int j = 1;
     83               ListNode midNode = head.next;
     84               while(j != mid){
     85                   j++;
     86                   midNode = midNode.next;
     87               }
     88               
     89               j++;
     90               midNode = midNode.next;
     91               stack.push(midNode);
     92               
     93               while(j != len){
     94                   j++;
     95                   midNode = midNode.next;
     96                   stack.push(midNode);
     97               }
     98               
     99               
    100               
    101               j=1;
    102               
    103               ListNode leftTemp = head.next;
    104               ListNode rightTemp = stack.pop();
    105               rightTemp.next = leftTemp;
    106               head.next = rightTemp;
    107                ListNode tail = leftTemp;  
    108               
    109               while(j != mid){
    110                   j++;
    111                   leftTemp = leftTemp.next;
    112                   rightTemp = stack.pop();
    113                   rightTemp.next = leftTemp;
    114                   tail.next = rightTemp;
    115                   tail = leftTemp;
    116               }
    117               tail.next = null;
    118           }
    119         
    120     }
    121 }
    运行结果

     

  • 相关阅读:
    终于有人把 Docker 讲清楚了,万字详解!
    Java 14 可能带来什么新特性?
    我 45 岁还写代码,怎么了?
    傻傻分不清?Integer、new Integer() 和 int 的面试题
    showModalDialog打开页面有缓存,不走action
    ajax,下拉框级联
    jsp中<!DOCTYPE>标签
    struts配置文件中如何从一个package的action跳到另一个package中的某个action
    jsp通过s:hidden传值给后台,后台数据出现了若干逗号问题
    struts2.0整合json
  • 原文地址:https://www.cnblogs.com/music180/p/6100482.html
Copyright © 2020-2023  润新知