876.チェーンの中間ノード(JavaScript)(新しいテーマ)


ヘッダ付きのノードを指定します.  head の非空チェーン表を返します.
中間点が二つあると、第二の中間点に戻ります.
例1:
  :[1,2,3,4,5]
  :        3 (     :[3,4,5])
        3 。 (               [3,4,5])。
  ,        ListNode       ans,  :
ans.val = 3, ans.next.val = 4, ans.next.next.val = 5,    ans.next.next.next = NULL.
例 2:
  :[1,2,3,4,5,6]
  :        4 (     :[4,5,6])
            ,     3   4,         。
ヒント:
  • 与えられたチェーンの接合点の中間  1 和  100 間に
  • 考え方:
    第一の方法:まず、シングルチェーンの全体を通して、長さを得て、中間位置を再遍歴します.
    第二の方法:一回だけを通して、二つのポインタtailとmidを使って、tailは尾部を指して、tailは二歩ずつ歩いて、midは一歩歩きます.終わったら、テールが最後に行くのは
    ステップは、tailが(2 n+1)ステップを行って、全部で偶数のノードであることを示しています.この時、midはまだ一歩を歩かなければなりません.
    /**
     * Definition for singly-linked list.
     * function ListNode(val) {
     *     this.val = val;
     *     this.next = null;
     * }
     */
    /**
     * @param {ListNode} head
     * @return {ListNode}
     */
    var middleNode = function(head) {
      var tail = mid = head;  //           
      var count = 0;
      while (tail.next !== null) {
        tail = tail.next;
        count ++;
        if (count === 2) {
          mid = mid.next;
          count = 0;
        }
      }
      if (count === 1) {
        mid = mid.next;
      }
      return mid;
    };