leetcode鍊表之回文鍊表

2021-01-14 碼匠的流水帳

本文主要記錄一下leetcode鍊表之回文鍊表

題目
請判斷一個鍊表是否為回文鍊表。

示例 1:

輸入: 1->2
輸出: false

示例 2:

輸入: 1->2->2->1
輸出: true

進階:
你能否用 O(n) 時間複雜度和 O(1) 空間複雜度解決此題?

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/palindrome-linked-list
著作權歸領扣網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

題解
/**
* Definition for singly-linked list.
* public class ListNode {
*     int val;
*     ListNode next;
*     ListNode(int x) { val = x; }
* }
*/
class Solution {
  public boolean isPalindrome(ListNode head) {
      if (head == null) {
          return true;
      }
      Stack stack = new Stack();
      ListNode cursor = head;
      while(cursor != null) {
          stack.push(cursor.val);
          cursor = cursor.next;
      }

      cursor = head;
      while(cursor != null) {
          int val = (int)stack.pop();
          if (val != cursor.val) {
              return false;
          }
          cursor = cursor.next;
      }
      return true;
  }
}

小結

這裡使用Stack來解決,先遍歷一遍放到Stack中,之後再次遍歷,挨個跟stack.pop出來的比較

doc


相關焦點

  • 每天一道leetcode234-回文鍊表
    正當班主任要繼續發話,只聽到角落默默想起來一個聲音:」K2」前言 2018.11.6號打卡明天的題目:https://leetcode-cn.com/problems/remove-linked-list-elements/以後明天的題目提取公布一下哈,因為有些朋友想提前做一下~題目 leetcode234-回文鍊表中文連結:https
  • LeetCode 234. 回文鍊表 | Python
    回文鍊表題目來源:力扣(LeetCode)https://leetcode-cn.com/problems/palindrome-linked-list/ 題目 請判斷一個鍊表是否為回文鍊表。重排鍊表 的思想有點類似,以下是前陣子寫的關於 143 題的解題思路,有興趣的話可以進行閱讀,多多支持。143. 重排鍊表 | 線性表、切分鍊表(迭代+雙指針)線性表 + 雙指針一般情況下,我們要求數組是否是回文,可以使用雙指針的話方法。
  • 常考算法面試題系列:鍊表的操作
    回文鍊表用快慢指針遍歷的同時翻轉前半部分,然後與後半部分比較即可。/** * Definition for singly-linked list.node2.next : headA; } return node1;};參考題解參考 leetcode官方題解。具體的可以去leetcode官網查看。
  • LeetCode面試系列 第6天:No.9 - 迴文數
    迴文數https://leetcode-cn.com/problems/palindrome-number/題目描述判斷一個整數是否是迴文數。迴文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數。
  • 一文學會鍊表解題 - CSDN
    今天就來看看鍊表的基本操作及其在面試中的常見解題思路,本文將從以下幾個點來講解鍊表的核心知識什麼是鍊表,鍊表的優缺點鍊表的表示及基本操作鍊表常見解題思路---翻轉鍊表常見解題思路---快慢指針什麼是鍊表相信大家已經開始迫不及待地想用鍊表解題了,不過在開始之前我們還是要先來溫習下鍊表的定義,以及它的優勢與劣勢,磨刀不誤砍柴功!
  • 鍊表(單鍊表)的基本操作及C語言實現
    線性表的鏈式存儲結構生成的表,稱作「鍊表」。鍊表中數據元素的構成每個元素本身由兩部分組成:本身的信息,稱為「數據域」;指向直接後繼的指針,稱為「指針域」。這兩部分信息組成數據元素的存儲結構,稱之為「結點」。n個節點通過指針域相互連結,組成一個鍊表。由於每個節點中只包含一個指針域,生成的鍊表又被稱為 線性鍊表 或 單鍊表。
  • 如何使用鍊表實現 LRU 算法
    當緩存大小達到上限之後,添加元素時會刪除最久未使用的元素,也就是鍊表的最後一個元素,然後將新的元素插入在鍊表頭。LRU 的應用場景LRU 算法可以用來管理我們的緩存數據。控制我們的緩存大小,用較少的緩存空間達到更高的緩存數據。舉例來說我們可以將一些不容易發生變化的數據且頭部效應表中的數據加入到緩存當中。
  • Leetcode刷題No.234
    https://leetcode-cn.com/problems/palindrome-linked-list我們來思考一下什麼叫回文,就是正過來反過來是一樣的。我們有兩種方式來判斷是否一樣,第一種是有兩個指針分別指向首和尾,然後比較是否相同,如果相同就向中間走一步,否則就是不同;第二種是從中間截斷,並將其中一半進行翻轉,然後對這兩個新的鍊表進行對比。因為這是單鍊表,所以只能採用第二種方式。其次要考慮奇數個節點和偶數個節點的情況,我的解決方法是在紙上將兩種可能性都畫出來,然後再寫代碼,這樣會一口氣寫對。
  • 通關LeetCode刷題完整攻略,省時又高效
    但還是再解釋一下快慢指針:這種算法的兩個指針的在數組上(或是鍊表上,序列上)的移動速度不一樣。還別說,這種方法在解決有環的鍊表和數組時特別有用。通過控制指針不同的移動速度(比如在環形鍊表上),這種算法證明了他們肯定會相遇的。快的一個指針肯定會追上慢的一個(可以想像成跑道上面跑得快的人套圈跑得慢的人)。
  • 一篇文章搞懂 數據結構中的 線性表存儲方式(順序表 與 鍊表)
    線性表有兩種存儲方式:順序表鍊表。下面分別來看這兩種存儲方式:順序表順序表 是 開闢連續的空間(如一維數組),順次把每一個元素存進來。鍊表鍊表就是 每一個數據存儲單元有兩部分 一是存數據的地方,另一個是存指針的地方。在實際的存儲位置上,鍊表中相鄰的AB,在實際位置可能距離很遠。為什麼會有鍊表呢?
  • 原型鏈就是個鍊表,有啥好研究的,隔三差五來一下,走馬燈麼?
    如果你想理解原型系統是個啥, 那就去看看數據結構中的鍊表, 回顧下大學課程, 對於那些不是科班出身的同學, 我想說的是網易雲課堂有免費的, 可以白嫖, 搜文章看對你沒有多大幫助, 缺少這些計算機基本的知識, 你的職業生涯不僅沒有上限而且短命.
  • leetcode刷對了麼
    今天,逆行君就帶你從世界觀和方法論兩方面走進「leetcode」 簡單來說,leetcode是一個美國的在線編程網站,它收集了各大公司的經典算法面試題,用戶可以選擇不同的語言進行代碼的在線編寫、編譯和調試。
  • 每日一道算法:迴文數
    題目:判斷一個整數是否是迴文數。迴文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數。示例1:輸入: 121輸出: true示例2:輸入: -121輸出: false解釋: 從左向右讀, 為 -121 。從右向左讀, 為 121- 。
  • LeetCode數組類知識點&題型總結
    數組(array)就是典型的順序存儲,而鍊表就是典型的非順序存儲。數組通常用於存儲一系列相同類型的數據。當我們在創建數組時,會在內存中劃分出一塊連續的內存用於存儲數據,插入數據時,會將數據按順序存儲在這塊連續的內存中,讀取時通過訪問數組的索引迅速取出。數組名就是一個指針,指向這段內存的起始地址。通過數組的類型,編譯器知道在訪問下一個元素的時候需要在內存中後移多少個字節。
  • 2018國家電網考試備考計算機之數據結構與算法(6)
    2018國家電網考試備考計算機之數據結構與算法(6)由北京事業單位考試網提供:更多關於2018國家電網考試,計算機數據結構與算法,事業單位考試網的內容請關注北京事業單位考試網!或關注北京華圖微信公眾號(bjhuatu),事業單位培訓諮詢電話:400-010-1568。