精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一道新的面試題回文鏈表你會么?

開發 前端
在我們的生活中經常會碰到這種回文的結構,回文就是反轉以后和以前一樣的就是回文結構,例如 1->2->3->2->1,我們將它反轉之后還是與原鏈表一樣,我們就稱這種鏈表結構為回文結構。

[[431751]]

新題來咯,回文鏈表

回文鏈表

力扣題目鏈接:https://leetcode-cn.com/problems/palindrome-linked-list/

請判斷一個鏈表是否為回文鏈表。

示例 1:

  • 輸入: 1->2
  • 輸出: false

示例 2:

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

思路

數組模擬

最直接的想法,就是把鏈表裝成數組,然后再判斷是否回文。

代碼也比較簡單。如下:

  1. class Solution { 
  2. public
  3.     bool isPalindrome(ListNode* head) { 
  4.         vector<int> vec; 
  5.         ListNode* cur  = head; 
  6.         while (cur) { 
  7.             vec.push_back(cur->val); 
  8.             cur = cur->next
  9.         } 
  10.         // 比較數組回文 
  11.         for (int i = 0, j = vec.size() - 1; i < j; i++, j--) { 
  12.             if (vec[i] != vec[j]) return false
  13.         } 
  14.         return true
  15.     } 
  16. }; 

上面代碼可以在優化,就是先求出鏈表長度,然后給定vector的初始長度,這樣避免vector每次添加節點重新開辟空間

  1. class Solution { 
  2. public
  3.     bool isPalindrome(ListNode* head) { 
  4.  
  5.         ListNode* cur  = head; 
  6.         int length = 0; 
  7.         while (cur) { 
  8.             length++; 
  9.             cur = cur->next
  10.         } 
  11.         vector<int> vec(length, 0); // 給定vector的初始長度,這樣避免vector每次添加節點重新開辟空間 
  12.         cur = head; 
  13.         int index = 0; 
  14.         while (cur) { 
  15.             vec[index++] = cur->val; 
  16.             cur = cur->next
  17.         } 
  18.         // 比較數組回文 
  19.         for (int i = 0, j = vec.size() - 1; i < j; i++, j--) { 
  20.             if (vec[i] != vec[j]) return false
  21.         } 
  22.         return true
  23.     } 
  24. }; 

反轉后半部分鏈表

分為如下幾步:

  • 用快慢指針,快指針有兩步,慢指針走一步,快指針遇到終止位置時,慢指針就在鏈表中間位置
  • 同時用pre記錄慢指針指向節點的前一個節點,用來分割鏈表
  • 將鏈表分為前后均等兩部分,如果鏈表長度是奇數,那么后半部分多一個節點
  • 將后半部分反轉 ,得cur2,前半部分為cur1
  • 按照cur1的長度,一次比較cur1和cur2的節點數值

如圖所示:

代碼如下:

  1. class Solution { 
  2. public
  3.     bool isPalindrome(ListNode* head) { 
  4.         if (head == nullptr || head->next == nullptr) return true
  5.         ListNode* slow = head; // 慢指針,找到鏈表中間分位置,作為分割 
  6.         ListNode* fast = head; 
  7.         ListNode* pre = head; // 記錄慢指針的前一個節點,用來分割鏈表 
  8.         while (fast && fast->next) { 
  9.             pre = slow; 
  10.             slow = slow->next
  11.             fast = fast->next->next
  12.         } 
  13.         pre->next = nullptr; // 分割鏈表 
  14.  
  15.         ListNode* cur1 = head;  // 前半部分 
  16.         ListNode* cur2 = reverseList(slow); // 反轉后半部分,總鏈表長度如果是奇數,cur2比cur1多一個節點 
  17.  
  18.         // 開始兩個鏈表的比較 
  19.         while (cur1) { 
  20.             if (cur1->val != cur2->val) return false
  21.             cur1 = cur1->next
  22.             cur2 = cur2->next
  23.         } 
  24.         return true
  25.     } 
  26.     // 反轉鏈表 
  27.     ListNode* reverseList(ListNode* head) { 
  28.         ListNode* temp; // 保存cur的下一個節點 
  29.         ListNode* cur = head; 
  30.         ListNode* pre = nullptr; 
  31.         while(cur) { 
  32.             temp = cur->next;  // 保存一下 cur的下一個節點,因為接下來要改變cur->next 
  33.             cur->next = pre; // 翻轉操作 
  34.             // 更新pre 和 cur指針 
  35.             pre = cur; 
  36.             cur = temp
  37.         } 
  38.         return pre; 
  39.     } 
  40. }; 

其他語言版本

Java

  1. // 方法一,使用數組 
  2. class Solution { 
  3.     public boolean isPalindrome(ListNode head) { 
  4.         int len = 0; 
  5.         // 統計鏈表長度 
  6.         ListNode cur = head; 
  7.         while (cur != null) { 
  8.             len++; 
  9.             cur = cur.next
  10.         } 
  11.         cur = head; 
  12.         int[] res = new int[len]; 
  13.         // 將元素加到數組之中 
  14.         for (int i = 0; i < res.length; i++){ 
  15.             res[i] = cur.val; 
  16.             cur = cur.next
  17.         } 
  18.         // 比較回文 
  19.         for (int i = 0, j = len - 1; i < j; i++, j--){ 
  20.             if (res[i] != res[j]){ 
  21.                 return false
  22.             } 
  23.         } 
  24.         return true
  25.     } 
  26.  
  27. // 方法二,快慢指針 
  28. class Solution { 
  29.     public boolean isPalindrome(ListNode head) { 
  30.         // 如果為空或者僅有一個節點,返回true 
  31.         if (head == null && head.next == nullreturn true
  32.         ListNode slow = head; 
  33.         ListNode fast = head; 
  34.         ListNode pre = head; 
  35.         while (fast != null && fast.next != null){ 
  36.             pre = slow;  // 記錄slow的前一個結點 
  37.             slow = slow.next
  38.             fast = fast.next.next
  39.         } 
  40.         pre.next = null;  // 分割兩個鏈表 
  41.  
  42.         // 前半部分 
  43.         ListNode cur1 = head; 
  44.         // 后半部分。這里使用了反轉鏈表 
  45.         ListNode cur2 = reverseList(slow); 
  46.  
  47.         while (cur1 != null){ 
  48.             if (cur1.val != cur2.val) return false
  49.  
  50.             // 注意要移動兩個結點 
  51.             cur1 = cur1.next
  52.             cur2 = cur2.next
  53.         } 
  54.         return true
  55.     } 
  56.     ListNode reverseList(ListNode head){ 
  57.         // 反轉鏈表 
  58.         ListNode tmp = null
  59.         ListNode pre = null
  60.         while (head != null){ 
  61.             tmp = head.next
  62.             head.next = pre; 
  63.             pre = head; 
  64.             head = tmp; 
  65.         } 
  66.         return pre; 
  67.     } 

 Python

  1. #數組模擬 
  2. class Solution: 
  3.     def isPalindrome(self, head: ListNode) -> bool: 
  4.         length = 0 
  5.         tmp = head 
  6.         while tmp: #求鏈表長度 
  7.             length += 1 
  8.             tmp = tmp.next 
  9.  
  10.         result = [0] * length 
  11.         tmp = head 
  12.         index = 0 
  13.         while tmp: #鏈表元素加入數組 
  14.             result[index] = tmp.val 
  15.             index += 1 
  16.             tmp = tmp.next 
  17.  
  18.         i, j = 0, length - 1 
  19.         while i < j: # 判斷回文 
  20.             if result[i] != result[j]: 
  21.                 return False 
  22.             i += 1 
  23.             j -= 1 
  24.         return True 
  25.  
  26. #反轉后半部分鏈表 
  27. class Solution: 
  28.     def isPalindrome(self, head: ListNode) -> bool: 
  29.         if head == None or head.next == None: 
  30.             return True 
  31.         slow, fast = head, head 
  32.         while fast and fast.next
  33.             pre = slow 
  34.             slow = slow.next 
  35.             fast = fast.next.next 
  36.  
  37.         pre.next = None # 分割鏈表 
  38.         cur1 = head # 前半部分 
  39.         cur2 = self.reverseList(slow) # 反轉后半部分,總鏈表長度如果是奇數,cur2比cur1多一個節點 
  40.         while cur1: 
  41.             if cur1.val != cur2.val: 
  42.                 return False 
  43.             cur1 = cur1.next 
  44.             cur2 = cur2.next 
  45.         return True 
  46.  
  47.     def reverseList(self, head: ListNode) -> ListNode: 
  48.         cur = head 
  49.         pre = None 
  50.         while(cur!=None): 
  51.             temp = cur.next # 保存一下cur的下一個節點 
  52.             cur.next = pre # 反轉 
  53.             pre = cur 
  54.             cur = temp 
  55.         return pre 

 

責任編輯:姜華 來源: 代碼隨想錄
相關推薦

2024-10-11 17:09:27

2011-05-23 11:27:32

面試題面試java

2018-03-06 15:30:47

Java面試題

2009-08-11 10:12:07

C#算法

2023-02-04 18:24:10

SeataJava業務

2009-08-11 14:59:57

一道面試題C#算法

2021-05-31 07:55:44

smartRepeatJavaScript函數

2022-04-08 07:52:17

CSS面試題HTML

2009-08-11 15:09:44

一道面試題C#算法

2017-11-21 12:15:27

數據庫面試題SQL

2023-08-01 08:10:46

內存緩存

2019-09-02 15:06:16

面試字節跳動算法

2021-03-16 05:44:26

JVM面試題運行時數據

2022-02-08 18:09:20

JS引擎解析器

2020-11-06 09:05:18

前端web開發

2011-03-02 10:58:16

SQL server入門面試題

2015-09-02 14:09:19

面試題程序設計

2017-03-10 09:33:16

JavaScript類型

2017-09-13 07:15:10

Python讀寫文件函數

2021-03-27 10:59:45

JavaScript開發代碼
點贊
收藏

51CTO技術棧公眾號

台湾色综合娱乐中文网| 国产盗摄在线观看| 日本vs亚洲vs韩国一区三区| 国产亚洲精品久久久久久| 五月天亚洲视频| 黄色一级片在线观看| 国产高清不卡二三区| 97视频在线观看免费高清完整版在线观看| 亚洲激情 欧美| 精品3atv在线视频| 亚洲免费观看高清完整| 精品视频第一区| 中文字幕在线日亚洲9| 欧美99在线视频观看| 精品五月天久久| 五月天开心婷婷| 8x8ⅹ拨牐拨牐拨牐在线观看| 国产亚洲欧美中文| 成人欧美一区二区三区视频| 日本一区二区三区久久| 亚洲视频中文| 日韩视频免费中文字幕| 亚洲调教欧美在线| 精品视频在线播放一区二区三区| 欧美日韩激情美女| 欧美性受黑人性爽| 高清中文字幕一区二区三区| 国产成人精品网址| 91精品国产自产在线观看永久| 人人干人人干人人干| 国产大片一区| 亚洲欧美自拍一区| 黄色免费视频网站| 久久av网站| 欧美三级资源在线| 欧美私人情侣网站| 不卡视频观看| 一区二区三区在线高清| 在线观看成人av| 黄色毛片在线看| 99国产精品一区| 91pron在线| 国产精品久久久久久无人区 | 2020国产在线| 中文字幕欧美一| 日韩少妇中文字幕| 日本精品专区| 91丨porny丨国产入口| 成人黄色片视频网站| 国产乱淫片视频| 美女视频黄免费的久久 | 久久电影网电视剧免费观看| 国产成+人+综合+亚洲欧美丁香花| 久久久精品视频免费| 欧美福利在线| 久久夜色精品国产亚洲aⅴ| 成年人看的免费视频| 精品国产一区二区三区av片| 亚洲欧洲午夜一线一品| 色天使在线视频| 全国精品免费看| 日韩电影中文字幕av| 国产极品一区二区| 亚洲传媒在线| 亚洲欧美在线第一页| 黄色短视频在线观看| 欧美交a欧美精品喷水| 亚洲黄页网在线观看| 国产伦精品一区二区免费| 国内精品国产成人国产三级粉色 | 亚洲欧美日韩国产另类专区| 91制片厂免费观看| 超碰在线免费公开| 亚洲精品国产成人久久av盗摄| 无码人妻精品一区二区三区99v| 久草免费在线| 亚洲宅男天堂在线观看无病毒 | 一本综合久久| 热久久美女精品天天吊色| 黄色片视频免费| 麻豆精品一区二区综合av| 91视频国产精品| 亚洲国产视频一区二区三区| av成人动漫在线观看| 久久综合给合久久狠狠色| 能在线看的av| 国产精品乱码人人做人人爱| 久久久久亚洲av无码专区喷水| caoporn免费在线视频| 五月婷婷欧美视频| 国内自拍视频网| 成人在线日韩| 亚洲电影免费观看| 一级黄色录像毛片| 这里只有精品在线| 奇门遁甲1982国语版免费观看高清| 成人免费一级片| 国产高清精品网站| 免费电影一区| 大地资源网3页在线观看| 亚洲成a人在线观看| 中文字幕第21页| 久久视频免费| 亚洲欧洲偷拍精品| 玖玖爱免费视频| 老司机精品久久| 91免费版黄色| 成人午夜在线观看视频| 一区二区三区色| 天天操天天爽天天射| 一区二区在线免费播放| 国产香蕉精品视频一区二区三区 | 成人免费在线观看视频网站| 亚洲网一区二区三区| 亚洲天堂第一页| 国产亚洲欧美久久久久| 琪琪一区二区三区| 国产一区在线免费| 中文字幕资源网在线观看| 欧美日韩中文字幕综合视频 | 成人久久18免费网站麻豆| 五月天色一区| 99久久精品免费看国产小宝寻花 | 国产三级一区二区| 久久这里只有精品18| 四虎国产精品永久在线国在线| 欧美精品一区二区三区视频| 国产黄a三级三级| 日精品一区二区三区| 国模精品一区二区三区| 国产成人在线视频免费观看| 欧美日韩一区国产| 波多野结衣一本| 亚洲激情偷拍| 99久久精品无码一区二区毛片| 在线视频1区2区| 一本大道久久精品懂色aⅴ| 亚洲视频 中文字幕| 国产精品传媒精东影业在线 | 亚洲资源在线| 国产一区二区三区在线| 91video| 成人看片黄a免费看在线| 日本三日本三级少妇三级66| 欧美一级做一级爱a做片性| 亚洲色图校园春色| 国产黄网在线观看| 国产亚洲自拍一区| 国产精品亚洲二区在线观看| 亚洲va久久| 欧洲亚洲妇女av| 性xxxx视频播放免费| 亚洲成av人片一区二区| 久久久久亚洲av无码专区首jn| 国产精品91一区二区三区| 成人av在线网址| 国产原创在线观看| 日韩一区二区三| 老女人性淫交视频| 国产不卡视频在线播放| 国产传媒久久久| 亚洲视频三区| 午夜精品久久久99热福利| 天天操天天舔天天干| 天天影视色香欲综合网老头| 久久福利小视频| 欧美在线综合| 日本一区二区免费看| 国产精品66| 久热99视频在线观看| 亚洲av无码国产综合专区| 亚洲一区二区精品视频| 日韩精品视频一区二区| 欧美一级久久| 亚洲精品日韩成人| 久久丁香四色| 97香蕉久久超级碰碰高清版 | 日韩欧美性视频| 91网址在线看| 538任你躁在线精品免费| 天天av综合| 国产精品一区二区三区免费| 伊人久久国产| 日韩视频中文字幕| 亚洲国产精品国自产拍久久| 狠狠色狠色综合曰曰| 国产精品天天干| 激情图区综合网| 成 年 人 黄 色 大 片大 全| 蜜乳av综合| 91亚洲永久免费精品| av蜜臀在线| 中文字幕免费精品一区| 国产黄色一区二区| 色综合一个色综合亚洲| 熟女少妇a性色生活片毛片| 国产jizzjizz一区二区| 免费在线观看毛片网站| 婷婷色综合网| 久久久久久99| 91视频亚洲| 57pao国产精品一区| 久久久久久久久免费视频| 亚洲激情视频在线播放| 中文字幕免费视频观看| 亚洲综合在线视频| 中文字幕伦理片| 成人国产一区二区三区精品| 九九热在线免费| 亚洲第一伊人| 亚洲图片小说在线| 麻豆一区一区三区四区| 成人午夜两性视频| 另类专区亚洲| 欧美激情伊人电影| 亚洲搞黄视频| 亚洲美女自拍视频| 亚洲av色香蕉一区二区三区| 欧美丝袜自拍制服另类| 91浏览器在线观看| 一区二区三区日韩精品视频| 欧美丰满美乳xxⅹ高潮www| 成人黄色在线网站| 91香蕉国产线在线观看| 日韩精品一二三四| 成熟丰满熟妇高潮xxxxx视频| 天天做天天爱天天爽综合网| 欧美日韩国产高清视频| 99精品国产一区二区三区2021 | 亚洲国产精品成人无久久精品 | 青娱乐免费在线视频| 国产精品热久久久久夜色精品三区| 星空大象在线观看免费播放| 国精产品一区一区三区mba桃花 | 少妇av片在线观看| 99国产精品视频免费观看| 精产国品一区二区三区| 麻豆一区二区在线| 激情内射人妻1区2区3区| 在线视频亚洲| 97超碰人人澡| 红桃视频欧美| 久久久久久久香蕉| 欧美一区精品| 香蕉视频在线网址| 五月天久久网站| 在线电影看在线一区二区三区| blacked蜜桃精品一区| 秋霞毛片久久久久久久久| 红杏成人性视频免费看| 成人在线观看网址| jizz久久精品永久免费| 国产精品国色综合久久| 视频国产精品| 亚洲综合视频1区| 蜜桃精品视频| 91在线精品观看| 日韩在线观看一区二区三区| 亚洲综合在线播放| 天堂精品在线视频| av蓝导航精品导航| 玖玖玖免费嫩草在线影院一区| 国产在线精品一区二区三区| 老司机凹凸av亚洲导航| 久久国产一区| 国语产色综合| 亚洲一区精品视频| 91精品动漫在线观看| 国产91在线亚洲| 一本色道久久综合| 欧美日韩亚洲一二三| 久久精品国产一区二区三区免费看| 中文字幕免费高清在线| 国产成人精品免费| 中文字幕一区二区人妻电影丶| 26uuu亚洲婷婷狠狠天堂| 美女久久久久久久久久| 日本一区二区三区久久久久久久久不 | 欧美特大特白屁股xxxx| 国产精品高精视频免费| 日韩黄色三级在线观看| 爱情岛论坛亚洲入口| 欧美人与动xxxxz0oz| 日韩高清av电影| 亚洲女同中文字幕| 3d动漫一区二区三区| 日韩vs国产vs欧美| 亚洲综合123| 99久久精品免费看| 99re6热在线精品视频| 夜夜揉揉日日人人青青一国产精品| 亚洲日本视频在线观看| 欧美日韩一二三| 嫩草影院一区二区| 伊人伊人伊人久久| 亚洲淫性视频| 日韩av不卡在线| 亚洲精品观看| 日本精品国语自产拍在线观看| 中文字幕av亚洲精品一部二部| 日韩欧美一区二| 国产一区二区三区免费| 欧美高清性xxxx| 综合久久久久综合| 久久免费激情视频| 欧美一级生活片| 国产一区二区影视| 久久久久久久久91| 久久亚洲人体| 乱一区二区三区在线播放| 婷婷亚洲五月| 久久九九国产视频| 成人av高清在线| 蜜桃av.com| 色丁香久综合在线久综合在线观看| 国产视频一二三四区| 在线播放日韩精品| 日产福利视频在线观看| 91精品综合久久| 国产精品久久久久久麻豆一区软件 | 蜜臀久久精品久久久久| 中文字幕亚洲无线码a| 日韩精品av| 动漫3d精品一区二区三区| 欧美mv日韩| 日本美女高潮视频| 91视频在线观看免费| 久草国产在线观看| 69精品人人人人| 97电影在线观看| 国产精品国产三级国产aⅴ浪潮 | 精品国产一区a| 麻豆网站视频在线观看| 国产精品黄色av| 日韩成人一级| 免费一级特黄毛片| 国产91综合网| 国产视频精品免费| 欧美综合色免费| 黄色片在线播放| 欧美亚洲国产另类| 群体交乱之放荡娇妻一区二区| 久艹在线免费观看| 国产91精品一区二区麻豆网站 | 欧美熟妇交换久久久久久分类| 久久亚洲私人国产精品va| va天堂va亚洲va影视| 中文字幕中文字幕在线中一区高清| 日本美女视频一区二区| 国产又大又粗又爽的毛片| 一本久道久久综合中文字幕| 欧美高清成人| 国产z一区二区三区| 一区三区在线欧| 毛片av免费在线观看| 2024国产精品视频| 国产成人无码一区二区在线播放| 国产视频精品一区二区三区| 极品av在线| 麻豆av一区| 日精品一区二区三区| 俄罗斯毛片基地| 7777精品伊人久久久大香线蕉 | 高潮毛片又色又爽免费| 亚洲嫩模很污视频| 精品欧美一区二区三区在线观看 | 亚洲欧美视频在线观看视频| 国产ts变态重口人妖hd| 久久久久久亚洲| 亚洲精品一级二级三级| 国产一区二区视频免费在线观看| 国产午夜精品久久久久久久| 中文亚洲av片在线观看| 日韩在线不卡视频| 天堂va在线高清一区| 欧美亚洲一二三区| 久久久久久久久久久久久夜| 久久久久久av无码免费看大片| 日韩一区二区三区xxxx| 亚洲精品一区二区三区中文字幕| 欧美 丝袜 自拍 制服 另类| 91色视频在线| 亚洲天堂中文字幕在线| 久久在精品线影院精品国产| 国产精品2023| 能在线观看的av网站| 亚洲欧美另类在线| 亚洲av成人无码久久精品老人| 国产成人精品免高潮在线观看| 国产精品黑丝在线播放| 一级欧美一级日韩片| 欧美午夜理伦三级在线观看| 91网在线看| 欧美日韩精品免费看| 韩国av一区二区三区四区| 天天操中文字幕| 超碰精品一区二区三区乱码| 美女一区二区在线观看| 国内外成人免费在线视频| 亚洲国产乱码最新视频|