判斷單鏈表字串是否為回文字串
例如:abcba 上海自來水來自海上
思想:利用快慢指標,快指標一次走兩格,慢指標一次乙個,因為這個字串為單數,當快指標走到尾,慢指標正好走到中間,將這個中值儲存下來,利用乙個函式將後半部分反轉(因為中值已經被記錄,中值.next就是後半部分的head),用乙個比較函式比較,當反轉的字串走完(長度為n/2 - 1),已經比較完成,返回結果。
下面是python3實現:
from typing import optional
class node:
def __init__(self, date: int, next= none):
self.date = date
self._next = next
class singlylinkedlist:
def __init__(self):
self._head = none
def find_by_value(self, value: int) -> optional[node]:
p = self._head
while p and p.date !=value:
p = p._next
return p
def find_by_index(self, index: int) -> optional[node]:
p = self._head
position = 0
while p and position != index:
p = p._next
position += 1
return p
def insert_value_to_head(self, value: int):
new_node = node(value)
self.insert_node_to_head(new_node)
def insert_node_to_head(self, new_node: node):
if new_node:
new_node._next = self._head
self._head = new_node
def insert_value_to_after(self, node: node, value: int):
new_node = node(value)
self.insert_node_to_after(node, new_node)
def insert_node_to_after(self, node: node, new_node: node):
if not node or not new_node:
return
new_node._next = node._next
node._next = new_node
def __repr__(self) -> str:
nums =
current = self._head
while current:
current = current._next
if len(nums) > 0 :
return '->'.join(str(num) for num in nums)
else:
return ''
def reverselist(self, head: node):#反序
#prev表示剛處理過的節點
prev = none
while head:
temp = head._next
head._next = prev
prev = head
head = temp
return prev
def findmiddle(self, head: node):#尋找中值
if not head or not head._next:
return false
#兩個指標
p = head
q = head
while q and q._next:
p = p._next
q = q._next._next
return p
def ispalindrome(self, head: node):#判斷是否為回文字串
if not head or not head._next:
return false
#乙個指標正常遍歷
p = head
#找到中值,方便另乙個指標找頭
middle = self.findmiddle(head)
#另乙個指標遍歷後半部分的反序
q = self.reverselist(middle._next)
while p and q and p.date == q.date:
p = p._next
q = q._next
#遍歷完成,若為回文,q肯定為空,p肯定指向中值
return q == none
if __name__ == '__main__':
l = singlylinkedlist()
l.insert_value_to_head('a')
l.insert_value_to_head('b')
l.insert_value_to_head('c')
l.insert_value_to_head('b')
l.insert_value_to_head('a')
print(l.ispalindrome(l._head))
使用單鏈表來判斷字串是否為回文字串
首先,回文字串是指首位對稱的字串,如abcddcba abcdcba。下面以單鏈表的知識來 展示,如何判斷回文字串的。單鏈表資料結構 public class linknode public void setnext linknode next public string getdata publi...
判斷字串是否為回文串
題目 給定乙個字串,驗證它是否是回文串,只考慮字母和數字字元,可以忽略字母的大小寫。說明 本題中,我們將空字串定義為有效的回文串。示例 1 輸入 a man,a plan,a canal panama 輸出 true 示例 2 輸入 race a car 輸出 false字串轉為小寫字串從字串開始和...
判斷字串是否回文字串
給定乙個字串,驗證它是否是回文串,只考慮字母和數字字元,可以忽略字母的大小寫。說明 本題中,我們將空字串定義為有效的回文串。示例 1 輸入 a man,a plan,a canal panama 輸出 true 示例 2 輸入 race a car 輸出 false public static bo...