精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

久久精品女人的天堂av| 欧美成人免费一级人片100| 无码人妻丰满熟妇区毛片| 四虎在线视频免费观看| 日日夜夜精品视频天天综合网| 亚洲一区999| 97超碰免费在线观看| 自拍偷拍欧美视频| 中文字幕日本乱码精品影院| www.成人三级视频| 久久久久久无码午夜精品直播| 91av精品| 亚洲一级一级97网| 国产伦精品一区二区三区88av| 粉嫩一区二区三区| 亚洲电影在线播放| 一区不卡视频| 日韩美女一级视频| 国产成人综合自拍| 国产免费亚洲高清| 国产在线观看黄色| 国产专区一区| 久久影院资源网| 鲁丝一区二区三区| 噜噜噜天天躁狠狠躁夜夜精品| 欧美色老头old∨ideo| 99久久国产综合精品五月天喷水| 日本福利专区在线观看| 91亚洲精品一区二区乱码| 成人在线激情视频| 欧美另类高清videos的特点| 中文在线不卡| 久久久久久久电影一区| 午夜国产福利一区二区| 视频一区欧美| 国产手机视频精品| 国产国语性生话播放| 日韩有吗在线观看| 欧美一区二区精品| 亚洲一区二区中文字幕在线观看| 日韩色淫视频| 色播五月激情综合网| 热99这里只有精品| 久色国产在线| 一片黄亚洲嫩模| 男同互操gay射视频在线看| 日本在线免费| 中文字幕一区二区5566日韩| 婷婷四月色综合| 91在线看黄| 亚洲国产精品黑人久久久| 日韩久久精品一区二区三区| 欧美一区二区少妇| 久久久久国产精品人| 欧美亚洲爱爱另类综合| 免费在线黄色影片| 欧美国产日韩一二三区| 日本在线观看一区| 97视频精彩视频在线观看| 中文成人av在线| 亚洲欧洲精品在线| 麻豆影视在线观看_| 亚洲欧美另类综合偷拍| 久久久国内精品| www在线观看黄色| 色综合色狠狠天天综合色| 午夜视频在线瓜伦| 国产精品伦一区二区| 8x8x8国产精品| 绯色av蜜臀vs少妇| 妖精视频一区二区三区免费观看 | 欧美在线激情网| 一级黄色av片| 韩日欧美一区二区三区| 99久久一区三区四区免费| 后入内射欧美99二区视频| 99国产精品国产精品毛片| 欧美精品一区二区三区在线看午夜| 黄色免费在线播放| 亚洲欧美一区二区久久| 黄页网站在线观看视频| 欧美日韩免费观看视频| 6080亚洲精品一区二区| 性农村xxxxx小树林| 猛男gaygay欧美视频| 最近2019中文字幕mv免费看| 欧美日韩在线观看免费| 亚洲影音一区| 成人日韩在线电影| 无码精品在线观看| 国产精品乱码人人做人人爱| 欧美日韩激情四射| 3d欧美精品动漫xxxx无尽| 欧美一区二区三区成人| 丰满少妇一区二区三区| 91精品国产福利在线观看麻豆| 97香蕉久久超级碰碰高清版| 最新中文字幕免费| www.爱久久.com| 一级特黄录像免费播放全99| 国产精品一二三产区| 在线成人小视频| 国产亚洲无码精品| 午夜精品999| 国产精品69av| 天天操天天操天天干| 亚洲婷婷在线视频| 国产xxxxx在线观看| 日韩成人在线观看视频| 尤物九九久久国产精品的特点 | 精品日本美女福利在线观看| 一起操在线视频| 你懂的一区二区三区| 欧美裸身视频免费观看| 成人黄色片在线观看| 99精品国产视频| 9191国产视频| 日韩精品一页| 国产亚洲精品美女久久久| 日韩熟女精品一区二区三区| 狠狠色综合日日| 日本日本精品二区免费| 91视频欧美| 欧美岛国在线观看| 999精品视频在线观看播放| 日日嗨av一区二区三区四区| 精品视频一区二区三区四区| 在线三级中文| 欧美一区二区三区喷汁尤物| 国产成人精品视频免费| 久久婷婷av| 久草一区二区| av中文字幕在线看| 欧美一级欧美一级在线播放| 一二三四在线观看视频| 日本成人在线视频网站| 日韩伦理一区二区三区av在线| 九色porny丨首页入口在线| 亚洲风情亚aⅴ在线发布| 久久午夜无码鲁丝片| 国产精品一级片在线观看| 久久av秘一区二区三区| 亚洲高清影院| 久久久精品国产网站| 97精品人妻一区二区三区在线| 久久中文娱乐网| 日韩视频第二页| 亚洲最大在线| 国产精品人成电影在线观看| 东凛在线观看| 欧美日韩国产电影| 少妇高潮一区二区三区喷水| 久久成人久久鬼色| 中文一区一区三区免费| av在线亚洲一区| 欧美成人免费播放| 黄色一级a毛片| 性久久久久久久| aa片在线观看视频在线播放| 久久不射2019中文字幕| 日韩欧美在线一区二区| 成人18视频在线观看| 久久久精品久久久| 风流老熟女一区二区三区| 天天av天天翘天天综合网色鬼国产| 最近中文字幕无免费| 日日骚欧美日韩| 久久久久亚洲av无码专区喷水| 91成人午夜| 日本高清久久天堂| 日韩美女网站| 精品日韩在线观看| 久久久成人免费视频| 日本一区二区动态图| 日本中文字幕在线不卡| 一区二区动漫| 视频二区一区| 欧州一区二区三区| 欧美资源在线观看| 求av网址在线观看| 亚洲第一视频网站| 做爰无遮挡三级| 一区二区欧美国产| 久久久久久亚洲中文字幕无码| 久久精品国产99| av日韩一区二区三区| 日韩欧美精品一区| 国产乱码精品一区二区三区日韩精品 | 国产精品久久久久久久| 国产精品久久九九| 国产精品成人国产| 国模视频一区二区三区| www.中文字幕久久久| 日韩免费一区二区| 中文精品久久久久人妻不卡| 亚洲专区一二三| 国产精品久久久视频| 成人一道本在线| www.久久91| 国产手机视频一区二区| 伊人网在线免费| 欧美日韩水蜜桃| 黑人中文字幕一区二区三区| 国产精品一区二区精品视频观看| 1769国产精品| 免费电影视频在线看| 最近中文字幕2019免费| 五月婷婷深深爱| 91精品国产综合久久精品图片| 国产高潮久久久| 亚洲精品国产一区二区精华液| 黄色aaa视频| 成人免费福利片| 手机在线免费毛片| 免费成人你懂的| 免费av网址在线| 一本色道久久综合亚洲精品不| 97av中文字幕| 欧美wwwww| 亚洲精品白虎| 精品午夜久久| 欧美日韩在线观看一区| 国产精品中文字幕制服诱惑| 亚洲一区二区三区视频播放| 精品久久毛片| 国产精品久久不能| 欧美成人h版| 91成人福利在线| 国产不卡123| 国内精品久久久久久久久| 色呦呦呦在线观看| 欧美日韩国产91| 中文字幕有码在线观看| 久久夜精品香蕉| 国产不卡在线| 免费不卡在线观看av| 国产精品一卡二卡三卡| 日韩中文字幕在线视频播放| 91在线看黄| 久久精品在线视频| 99福利在线| 欧美激情欧美狂野欧美精品| 怡红院在线播放| 欧美黑人性生活视频| 毛片网站在线看| 久久久之久亚州精品露出| 国产极品人妖在线观看| 午夜精品久久久久久99热软件| av影片在线| 欧美一二三视频| 日韩精品三区| 国产日韩av在线| 久久视频社区| 国产伦视频一区二区三区| 高潮久久久久久久久久久久久久| 国产伦精品一区二区三区四区视频| 岛国精品一区| 免费成人在线观看av| 欧洲杯半决赛直播| 制服诱惑一区| 欧美日韩99| 成人性免费视频| 久久久久中文| 99热一区二区| 国产传媒久久文化传媒| 一级特级黄色片| 国产三级精品在线| 波多野结衣久久久久| 亚洲一区二区三区免费视频| 国产在线观看黄色| 欧美日韩精品系列| 亚洲乱色熟女一区二区三区| 日韩成人中文电影| av在线播放网站| 欧美猛少妇色xxxxx| а√天堂资源官网在线资源| 国产精品草莓在线免费观看| 91麻豆精品| 精品一区久久久久久| 欧美偷拍自拍| www.夜夜爱| 日韩国产高清影视| 丰满饥渴老女人hd| 久久久蜜臀国产一区二区| 久久精品一区二区三区四区五区 | 国产人妻777人伦精品hd| 麻豆精品网站| 涩多多在线观看| 91一区二区三区在线观看| 乱老熟女一区二区三区| 亚洲成人综合在线| 亚洲精品一区二区二区| 精品成人在线观看| 91伦理视频在线观看| 欧美激情一级欧美精品| 成人h在线观看| 99九九视频| 日韩久久电影| 夫妻免费无码v看片| 国产毛片精品国产一区二区三区| 国产精品三级在线观看无码| 亚洲精品视频一区| 乱子伦一区二区三区| 亚洲精品一区二区在线观看| av大片在线观看| 欧美一级大片在线免费观看| 亚洲1区在线观看| 亚洲v欧美v另类v综合v日韩v| 亚洲毛片在线| 日本特黄在线观看| 欧美激情一区二区三区| 青青草成人av| 日韩精品资源二区在线| 男女啪啪在线观看| 国产精品久久久久久久久| 久久成人福利| 成人av在线播放观看| 麻豆精品一二三| 91国模少妇一区二区三区| 亚洲一级二级三级| 超碰福利在线观看| 久久夜色精品国产欧美乱| a成人v在线| 日韩av一级大片| 久久久久久穴| 中文字幕高清视频| 欧美日韩国产一中文字不卡| 国精产品一品二品国精品69xx| 久久综合九色九九 | 精品蜜桃一区二区三区| 午夜精品久久| 波多野结衣中文字幕在线播放| 国产精品国产三级国产aⅴ中文 | 日韩一区二区视频| 日本视频在线播放| 国产精品亚洲第一区| 欧美美女一区| 爱情岛论坛亚洲首页入口章节| 国产色产综合产在线视频| 国产一级一级国产| 国产午夜精品视频免费不卡69堂| xxxxxx欧美| 日本一区二区三区免费看| 日本不卡在线视频| 日日操免费视频| 欧美福利视频一区| 成人免费看片| 懂色av一区二区三区在线播放| 午夜亚洲福利| 国产白袜脚足j棉袜在线观看| 亚洲一区二区精品3399| 天天操天天干天天爱| 欧洲成人在线视频| 欧洲杯什么时候开赛| 一本一道久久a久久综合蜜桃| 1024国产精品| 好吊视频一二三区| 2019中文字幕在线观看| 久久综合影院| 日本不卡一区二区在线观看| 自拍偷拍亚洲欧美日韩| 亚洲成人一二三区| 2019亚洲日韩新视频| 国产日产精品一区二区三区四区的观看方式 | 性色av无码久久一区二区三区| 欧美视频一区在线| a免费在线观看| 精品国产91亚洲一区二区三区www| 国产精品日本| 久久视频精品在线观看| 日韩一区二区在线看片| 九色porny丨首页入口在线| 色一情一乱一伦一区二区三区丨| 激情六月婷婷久久| 国产午夜福利精品| 国产午夜精品美女视频明星a级| 另类一区二区三区| 亚洲精品无码国产| 国产欧美日韩视频在线观看| 国产欧美日韩综合精品一区二区三区| 欧美精品video| 欧美视频免费| 日批免费观看视频| 色欲综合视频天天天| 老司机午夜在线| 精品无码久久久久国产| 久久av中文字幕片| 国产成人无码精品久在线观看 | 蜜桃在线一区二区三区| 欧美日韩大片在线观看| 亚洲日本成人女熟在线观看| 日韩一区二区三区精品视频第3页| 成人在线观看黄| 中文字幕视频一区| 国产天堂素人系列在线视频| 147欧美人体大胆444| 视频一区在线播放| 国产性生活网站| www.99久久热国产日韩欧美.com| 日本妇女一区|