判斷乙個鍊錶是否是回文結構

2021-09-25 20:25:21 字數 1234 閱讀 6152

給定乙個鍊錶的頭結點,判斷該鍊錶是否是回文結構

1->2->1 返回true

1->2->2->1 返回true

1->2->3 返回false

方法一:

從左到右遍歷鍊錶,遍歷的過程中將每個節點依次入棧

待所有節點入棧後,從棧頂到棧底中元素的值和鍊錶中從左至右的值如果相等則證明是回文結構,否則不是

public static boolean ispalindrome(node head) 

h=head;

while(!stack.isempty())

h=h.next;

} return true;

}

方法二:

將鍊錶拆分為左右兩部分,只將右部分的元素入棧

例如:1->2->1 左部分為1右部分為1

1->2->2->1 左部分為1->2 右部分為2->1

只將右部分入棧,然後判斷和左部分的值是否匹配

定位中間節點的辦法:定義兩個指標,乙個快指標,乙個慢指標,快指標每次走兩步,慢指標每次走一步,快指標結束時,慢指標定位到右部分的第乙個節點

public static boolean ispalindrome2(node head) 

stackstack=new stack<>();

while(slow!=null)

while(!stack.isempty())

head=head.next;

} return true;

}

方法三:

public static boolean ispalindrome3(node head) 

n2=n1.next;//右半部分的第乙個節點;

n1.next=null;

node n3=null;

while(n2!=null)

n3=n1;//右半部分翻轉後的頭結點

n2=head;//左半部分的頭結點

boolean re=true;

while(n1!=null&&n2!=null)

n1=n1.next;n2=n2.next;

} //恢復鍊錶

n1=n3.next;

n3.next=null;

while(n1!=null)

return re;

}

判斷乙個鍊錶是否為回文結構

題目 給定乙個鍊錶的頭結點head,判斷該鍊錶是否為回文結構。例如 1 2 1,返回true 1 2 2 1,返回true 15 6 15,返回true 1 2 3,返回false 方法一 利用棧結構實現。從頭遍歷鍊錶,遍歷的同時把加點一次壓入棧中。因為棧為先進後出結構,所以遍歷完成後,從棧頂到棧底...

判斷乙個鍊錶是否為回文結構

這道題的做法是首先找到列表中間的結點,然後把中間結點之後的鍊錶翻轉,然後同時遍歷兩個鍊錶,比較結點的資料是否相同,如果有不同的,返回false,遍歷完說明資料相同,返回true public class palindromelist fast fast.next slow slow.next ret...

判斷乙個鍊錶是否為回文結構

演算法專題導航頁面 題目描述 給定乙個鍊錶,請判斷該鍊錶是否為回文結構。輸入描述 n 表示鍊錶的長度。val 表示鍊錶節點的值 輸出描述 如果為回文結構輸出 true 否則輸出 false 示例1 輸入5 1 2 3 2 1 輸出true 備註 1 n 2000000 1000000 val 100...