JavaScriptアルゴリズムの質問の実現-206-逆リンクリスト——Tencentインタビュー質問バンク

質問インデックス(最大5):⭐⭐⭐⭐⭐

タイトル

単一リンクリストを逆にします。

例:

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

上級:

リストは反復的または再帰的に反転できます。この問題を2つの方法で解決できますか?

LeetCodeオリジナル質問ガイド

解決策

3つのポインターを使用した反復:頭、前、現在を簡単に達成できます

JavaScriptの実装

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param {ListNode} head
 * @return {ListNode}
 */

// 算法实现
function ListNode(val) {
  this.val = val;
  this.next = null;
}
var reverseList = function (head) {
  // 特殊情况
  if (head === null || head.next === null) return head;
  // 从第二个节点开始迭代反转
  // 注意这几句的顺序不能颠倒
  let previous = head;
  head = head.next;
  let current = head;
  previous.next = null;
  do {
    head = head.next;
    current.next = previous;
    previous = current;
    current = head;
  } while (head !== null)
  return previous;
};

// 测试数据
// 1->2->3->4->5->null
let h = new ListNode(1);
let n2 = new ListNode(2);
let n3 = new ListNode(3);
let n4 = new ListNode(4);
let n5 = new ListNode(5);
h.next = n2;
n2.next = n3;
n3.next = n4;
n4.next = n5;

function showLink(head) {
  let temp = head;
  while (temp != null) {
    console.log(temp.val);
    temp = temp.next;
  }
}
showLink(h);
let h2 = reverseList(h);
showLink(h2);

体験

友人がマイクロソフトにいたときにこの質問に遭遇しましたが、この質問の頻度は非常に高いです。トピック自体は難しくありません。注意してください。

データ構造の教師がこの問題について話しているとき、私たちは2つのポインターのみを使用する必要があり、それは大きなラウンドでした。これは次元の削減でした。=-=、3つのポインターを使用してストレージスペースを犠牲にし、脳細胞を節約するのはよくありません。

おすすめ

転載: www.cnblogs.com/zhoujiayingvana/p/12686936.html