算法:鏈表反轉

在面試百度實習生的 時候遇到了這個問題,不是太難,當時只給面試官敘述了一下思路,後來想起這個問題仍是決定手擼一遍,要否則總數眼高手低,昨天連快排都擼不出來了。。。php

題目簡介:沒什麼能夠過多介紹的,就是實現一個鏈表的反轉面試

<?php

class Node
{
  public $value;
  public $next = null;

  public function __construct($data) {
    $this->value = $data;
  }
}

/**
 * 構建鏈表
 * @param $vals array 鏈表值的數組
 * @return Node
 */
function genLinkList($vals) {
  $headVal = array_shift($vals);
  $head = new Node($headVal);
  $p = $head;
  foreach ($vals as $val) {
    $p->next = new Node($val);
    $p = $p->next;
  }
  return $head;
}

/**
 * 反轉鏈表
 * @param $head Node 鏈表頭結點
 * @return Node 反轉後的鏈表頭結點
 */
function revLinkList($head) {
  $h = $head;
  if (!$h->next) {
    return $head;
  }
  $n = $h->next;
  while ($n) {
    $nn = $n->next;
    $n->next = $h;
    $h = $n;
    $n = $nn;
  }
  $head->next = null;
  return $h;
}

$data = [1, 2, 3, 4, 5, 6, 7];

$linkList = genLinkList($data);

print_r($linkList);

$linkListRev = revLinkList($linkList);

print_r($linkListRev);
相關文章
相關標籤/搜索