中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python判斷回文鏈表的方法是什么

發布時間:2022-01-17 16:17:23 來源:億速云 閱讀:117 作者:柒染 欄目:開發技術

小編今天帶大家了解Python判斷回文鏈表的方法是什么,文中知識點介紹的非常詳細。覺得有幫助的朋友可以跟著小編一起瀏覽文章的內容,希望能夠幫助更多想解決這個問題的朋友找到問題的答案,下面跟著小編一起深入學習“Python判斷回文鏈表的方法是什么”的知識吧。

什么是回文數?

回文數簡單的說就是正著倒著讀都是一樣的,比如:12321,1221,1111等等,正著讀也是12321,倒著讀也是12321。

首先,接收用戶輸入數字列表轉換成鏈表

比如用戶輸入:1 2 3 2 1,轉換為鏈表后,如下圖

Python判斷回文鏈表的方法是什么

首先接收用戶輸入數字列表,每個數字用空格分隔,使用split截斷字符串,使用map,把每個元素映射成int類型,然后再轉成list,使用循環取出每項元素添加到鏈表中。

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

代碼如下:

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

判斷是否是回文

找中間位置處使用快慢指針法,慢指針一次跳一格,快指針一次跳2格,所以快指針是慢指針的2倍,當快指針為None時,說明鏈表結束了,也就是代碼中的fast.next.next=None時,鏈表結束,此時慢指針剛好指著鏈表的中間位置,所以就得到3是中間位置,從3的下一個位置。再將中間位置的下一個節點開始的鏈表,進行倒敘,也就是21,倒敘后為12。

Python判斷回文鏈表的方法是什么

 再與中間位置前面一段鏈表進行比較是否相等,如果p==None時說明鏈表為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
    # 查找中間節點,一快一慢指針,快的是慢的2倍,當快指針為None時,說明已經找到中間節點了
    while fast.next is not None and fast.next.next is not None:
        slow = slow.next  # 慢指針每次向后移一個位置
        fast = fast.next.next  # 快指針每次向后移2個位置
 
    h = slow.next
    q = reverse(h)  # 逆至無頭節點鏈表
    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

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

第1步:保存當前頭節點所只向的節點

第2步:使當前節點指向頭節點所指向的節點

第3步:使頭節點只向當前節點

第4步:使指針(p)指向下一個節點,指向下一次循環

頭插法圖解:

Python判斷回文鏈表的方法是什么

完整代碼:

# 逆置不帶頭結點的單鏈表
def reverse(head):
    h = ListNode(0)
    p = head
    while p is not None:
        x = p.next  # 保存著當前節點指向的下一個節點
        p.next = h.next  # 當前項的指向節點指向頭節點指向的節點
        h.next = p  # 頭節點再指向當前節點
        p = x  # 使節點指向下一個節點
    return h.next

完整代碼

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

# 逆置不帶頭結點的單鏈表
def reverse(head):
    h = ListNode(0)
    p = head
    while p is not None:
        x = p.next  # 保存著當前節點指向的下一個節點
        p.next = h.next  # 當前項的指向節點指向頭節點指向的節點
        h.next = p  # 頭節點再指向當前節點
        p = x  # 使節點指向下一個節點
    return h.next

# 是否是回文
def palindrome(l):
    if l is None:
        return True
    slow = fast = l
    # 查找中間節點,一快一慢指針,快的是慢的2倍,當快指針為None時,說明已經找到中間節點了
    while fast.next is not None and fast.next.next is not None:
        slow = slow.next  # 慢指針每次向后移一個位置
        fast = fast.next.next  # 快指針每次向后移2個位置
 
    h = slow.next
    q = reverse(h)  # 逆至無頭節點鏈表
    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))

運行結果圖:

Python判斷回文鏈表的方法是什么

Python判斷回文鏈表的方法是什么

Python判斷回文鏈表的方法是什么

python主要應用領域有哪些

1、云計算,典型應用OpenStack。2、WEB前端開發,眾多大型網站均為Python開發。3.人工智能應用,基于大數據分析和深度學習而發展出來的人工智能本質上已經無法離開python。4、系統運維工程項目,自動化運維的標配就是python+Django/flask。5、金融理財分析,量化交易,金融分析。6、大數據分析。

感謝大家的閱讀,以上就是“Python判斷回文鏈表的方法是什么”的全部內容了,學會的朋友趕緊操作起來吧。相信億速云小編一定會給大家帶來更優質的文章。謝謝大家對億速云網站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

彭阳县| 革吉县| 克拉玛依市| 丰都县| 金华市| 肥城市| 和林格尔县| 象州县| 鄯善县| 浮山县| 玉环县| 沙湾县| 方山县| 武冈市| 东阳市| 宁陕县| 梓潼县| 嵊泗县| 峡江县| 江华| 盐津县| 建湖县| 商都县| 乐亭县| 广水市| 长顺县| 报价| 东台市| 和硕县| 大方县| 喀喇沁旗| 聊城市| 大关县| 高雄县| 桦川县| 沅江市| 荔浦县| 永州市| 新蔡县| 平度市| 富锦市|