Advertisement
sweet1cris

Untitled

Jan 9th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.42 KB | None | 0 0
  1. public class Solution {
  2.     private ListNode reverse(ListNode head) {
  3.         ListNode newHead = null;
  4.         while (head != null) {
  5.             ListNode temp = head.next;
  6.             head.next = newHead;
  7.             newHead = head;
  8.             head = temp;
  9.         }
  10.         return newHead;
  11.     }
  12.  
  13.     private void merge(ListNode head1, ListNode head2) {
  14.         int index = 0;
  15.         ListNode dummy = new ListNode(0);
  16.         while (head1 != null && head2 != null) {
  17.             if (index % 2 == 0) {
  18.                 dummy.next = head1;
  19.                 head1 = head1.next;
  20.             } else {
  21.                 dummy.next = head2;
  22.                 head2 = head2.next;
  23.             }
  24.             dummy = dummy.next;
  25.             index ++;
  26.         }
  27.         if (head1 != null) {
  28.             dummy.next = head1;
  29.         } else {
  30.             dummy.next = head2;
  31.         }
  32.     }
  33.  
  34.     private ListNode findMiddle(ListNode head) {
  35.         ListNode slow = head, fast = head.next;
  36.         while (fast != null && fast.next != null) {
  37.             fast = fast.next.next;
  38.             slow = slow.next;
  39.         }
  40.         return slow;
  41.     }
  42.  
  43.     public void reorderList(ListNode head) {
  44.         if (head == null || head.next == null) {
  45.             return;
  46.         }
  47.  
  48.         ListNode mid = findMiddle(head);
  49.         ListNode tail = reverse(mid.next);
  50.         mid.next = null;
  51.  
  52.         merge(head, tail);
  53.     }
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement