最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python判斷回文鏈表的方法

 更新時(shí)間:2022年01月17日 14:44:46   作者:小星博博  
這篇文章主要介紹了Python判斷回文鏈表,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

什么是回文數(shù)?

回文數(shù)簡(jiǎn)單的說(shuō)就是正著倒著讀都是一樣的,比如:12321,1221,1111等等,正著讀也是12321,倒著讀也是12321。

首先,接收用戶輸入數(shù)字列表轉(zhuǎn)換成鏈表

比如用戶輸入:1 2 3 2 1,轉(zhuǎn)換為鏈表后,如下圖

首先接收用戶輸入數(shù)字列表,每個(gè)數(shù)字用空格分隔,使用split截?cái)嘧址褂胢ap,把每個(gè)元素映射成int類型,然后再轉(zhuǎn)成list,使用循環(huán)取出每項(xiàng)元素添加到鏈表中。

lt = list(map(int, s.split(' ')))

代碼如下:

# 鏈表類
class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None
 
# 字符串轉(zhuǎn)換為鏈表
def list_node(s):
    lt = list(map(int, s.split(' ')))
    l = ListNode(0)  # 創(chuàng)建頭節(jié)點(diǎn)為0的鏈表
    p = l
    for i in range(len(lt)):
        p.next = ListNode(lt[i])
        p = p.next
    return l.next

判斷是否是回文

找中間位置處使用快慢指針?lè)?,慢指針一次跳一格,快指針一次?格,所以快指針是慢指針的2倍,當(dāng)快指針為None時(shí),說(shuō)明鏈表結(jié)束了,也就是代碼中的fast.next.next=None時(shí),鏈表結(jié)束,此時(shí)慢指針剛好指著鏈表的中間位置,所以就得到3是中間位置,從3的下一個(gè)位置。再將中間位置的下一個(gè)節(jié)點(diǎn)開(kāi)始的鏈表,進(jìn)行倒敘,也就是21,倒敘后為12。

 再與中間位置前面一段鏈表進(jìn)行比較是否相等,如果p==None時(shí)說(shuō)明鏈表為None,直接返回True,p==None,q也一定為None(具體看后面的倒敘方法)

while p is not None and q is not None:
        if p.val is not q.val:
            return False
        q, p = q.next, p.next

完整代碼:

# 是否是回文
def palindrome(l):
    if l is None:
        return True
    slow = fast = l
    # 查找中間節(jié)點(diǎn),一快一慢指針,快的是慢的2倍,當(dāng)快指針為None時(shí),說(shuō)明已經(jīng)找到中間節(jié)點(diǎn)了
    while fast.next is not None and fast.next.next is not None:
        slow = slow.next  # 慢指針每次向后移一個(gè)位置
        fast = fast.next.next  # 快指針每次向后移2個(gè)位置
 
    h = slow.next
    q = reverse(h)  # 逆至無(wú)頭節(jié)點(diǎn)鏈表
    slow.next = None
    p = l
    while p is not None and q is not None:
        if p.val is not q.val:
            return False
        q, p = q.next, p.next
    if q is None:
        return True
    else:
        return False

倒敘鏈表(頭插法):聲明一個(gè)頭節(jié)點(diǎn),然后遍歷每個(gè)節(jié)點(diǎn),再頭插到鏈表里面,總共是4步;

第1步:保存當(dāng)前頭節(jié)點(diǎn)所只向的節(jié)點(diǎn)

第2步:使當(dāng)前節(jié)點(diǎn)指向頭節(jié)點(diǎn)所指向的節(jié)點(diǎn)

第3步:使頭節(jié)點(diǎn)只向當(dāng)前節(jié)點(diǎn)

第4步:使指針(p)指向下一個(gè)節(jié)點(diǎn),指向下一次循環(huán)

頭插法圖解:

完整代碼:

# 逆置不帶頭結(jié)點(diǎn)的單鏈表
def reverse(head):
    h = ListNode(0)
    p = head
    while p is not None:
        x = p.next  # 保存著當(dāng)前節(jié)點(diǎn)指向的下一個(gè)節(jié)點(diǎn)
        p.next = h.next  # 當(dāng)前項(xiàng)的指向節(jié)點(diǎn)指向頭節(jié)點(diǎn)指向的節(jié)點(diǎn)
        h.next = p  # 頭節(jié)點(diǎn)再指向當(dāng)前節(jié)點(diǎn)
        p = x  # 使節(jié)點(diǎn)指向下一個(gè)節(jié)點(diǎn)
    return h.next

完整代碼

# 回文鏈表,輸入1->2輸出false,輸入1->
# 鏈表類
class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None
 
# 字符串轉(zhuǎn)換為鏈表
def list_node(s):
    lt = list(map(int, s.split(' ')))
    l = ListNode(0)  # 創(chuàng)建頭節(jié)點(diǎn)為0的鏈表
    p = l
    for i in range(len(lt)):
        p.next = ListNode(lt[i])
        p = p.next
    return l.next

# 逆置不帶頭結(jié)點(diǎn)的單鏈表
def reverse(head):
    h = ListNode(0)
    p = head
    while p is not None:
        x = p.next  # 保存著當(dāng)前節(jié)點(diǎn)指向的下一個(gè)節(jié)點(diǎn)
        p.next = h.next  # 當(dāng)前項(xiàng)的指向節(jié)點(diǎn)指向頭節(jié)點(diǎn)指向的節(jié)點(diǎn)
        h.next = p  # 頭節(jié)點(diǎn)再指向當(dāng)前節(jié)點(diǎn)
        p = x  # 使節(jié)點(diǎn)指向下一個(gè)節(jié)點(diǎn)
    return h.next

# 是否是回文
def palindrome(l):
    if l is None:
        return True
    slow = fast = l
    # 查找中間節(jié)點(diǎn),一快一慢指針,快的是慢的2倍,當(dāng)快指針為None時(shí),說(shuō)明已經(jīng)找到中間節(jié)點(diǎn)了
    while fast.next is not None and fast.next.next is not None:
        slow = slow.next  # 慢指針每次向后移一個(gè)位置
        fast = fast.next.next  # 快指針每次向后移2個(gè)位置
 
    h = slow.next
    q = reverse(h)  # 逆至無(wú)頭節(jié)點(diǎn)鏈表
    slow.next = None
    p = l
    while p is not None and q is not None:
        if p.val is not q.val:
            return False
        q, p = q.next, p.next
    if q is None:
        return True
    else:
        return False

if __name__ == '__main__':
    print("回文鏈表")
    l = list_node(input())
    print(palindrome(l))

運(yùn)行結(jié)果圖:

到此這篇關(guān)于Python判斷回文鏈表的文章就介紹到這了,更多相關(guān)Python回文鏈表內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python __slots__的使用方法

    Python __slots__的使用方法

    這篇文章主要介紹了Python __slots__的使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 解決pyinstaller打包pyqt5的問(wèn)題

    解決pyinstaller打包pyqt5的問(wèn)題

    今天小編就為大家分享一篇解決pyinstaller打包pyqt5的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • Python ollama的搭建與使用流程分析

    Python ollama的搭建與使用流程分析

    這篇文章主要介紹了Python ollama的搭建與使用流程分析,詳細(xì)介紹了ollama的安裝方式,本文結(jié)合實(shí)例給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-04-04
  • 詳解Python讀取yaml文件多層菜單

    詳解Python讀取yaml文件多層菜單

    這篇文章主要介紹了Python讀取yaml文件多層菜單,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Gradio構(gòu)建交互式Python應(yīng)用使用示例詳解

    Gradio構(gòu)建交互式Python應(yīng)用使用示例詳解

    這篇文章主要為大家介紹了Gradio構(gòu)建交互式Python應(yīng)用使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • python連接遠(yuǎn)程ftp服務(wù)器并列出目錄下文件的方法

    python連接遠(yuǎn)程ftp服務(wù)器并列出目錄下文件的方法

    這篇文章主要介紹了python連接遠(yuǎn)程ftp服務(wù)器并列出目錄下文件的方法,實(shí)例分析了Python使用pysftp模塊的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • python自動(dòng)化實(shí)現(xiàn)登錄獲取圖片驗(yàn)證碼功能

    python自動(dòng)化實(shí)現(xiàn)登錄獲取圖片驗(yàn)證碼功能

    這篇文章主要介紹了python自動(dòng)化實(shí)現(xiàn)登錄獲取圖片驗(yàn)證碼功能,本文通過(guò)實(shí)例截圖的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Python如何用str.format()批量生成網(wǎng)址(豆瓣讀書(shū)為例)

    Python如何用str.format()批量生成網(wǎng)址(豆瓣讀書(shū)為例)

    這篇文章主要介紹了Python如何用str.format()批量生成網(wǎng)址(豆瓣讀書(shū)為例),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Python2與Python3的區(qū)別實(shí)例分析

    Python2與Python3的區(qū)別實(shí)例分析

    這篇文章主要介紹了Python2與Python3的區(qū)別,結(jié)合實(shí)例形式分析了Python2與Python3在輸出、編碼、函數(shù)、運(yùn)算等操作的常見(jiàn)區(qū)別與使用技巧,需要的朋友可以參考下
    2019-04-04
  • 用python爬取分析淘寶商品信息詳解技術(shù)篇

    用python爬取分析淘寶商品信息詳解技術(shù)篇

    這篇文章主要介紹了用python爬取分析淘寶商品信息的技術(shù),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08

最新評(píng)論

廊坊市| 巴东县| 甘洛县| 怀柔区| 阿克| 赤峰市| 永新县| 望都县| 临潭县| 邮箱| 洛南县| 长治市| 西华县| 抚松县| 玉树县| 田阳县| 乡城县| 九江市| 盐津县| 南康市| 南阳市| 丽水市| 南川市| 得荣县| 安泽县| 霍州市| 淮安市| 陆河县| 孝感市| 江油市| 新竹市| 乌审旗| 高邑县| 扎兰屯市| 东兴市| 宜良县| 夏河县| 长沙市| 大姚县| 灌阳县| 贡觉县|