牛客網高頻演算法題系列-BM13-判斷一個連結串列是否為迴文結構
題目描述
給定一個連結串列,請判斷該連結串列是否為迴文結構。
迴文是指該字串正序逆序完全一致。原題目見:BM13 判斷一個連結串列是否為迴文結構
解法一:連結串列遍歷
首先,考慮特殊情況,如果連結串列為空或只有一個連結串列,預設是迴文結構,直接返回true。
否則,使用一個額外的list進行處理,處理過程如下:
- 遍歷原連結串列,將連結串列中所有結點的值新增到一個list中;
遍歷list中的值判斷該連結串列是否是迴文結構,遍歷過程如下:
- 遍歷list中
0-list.size()/2
的值;- 判斷
i
的值和list.size() - i - 1
的值是否相等,如果不相等,則不可能是迴文結構,直接返回false。- 遍歷完成後,如果list中首尾的相應位置的值都相等,說明原連結串列是迴文結構,返回true。
程式碼
import java.util.ArrayList;
import java.util.List;
public class Bm013 {
/**
* 判斷一個連結串列是否為迴文結構
*
* @param head ListNode類 the head
* @return bool布林型
*/
public static boolean isPail(ListNode head) {
// 如果連結串列為空或只有一個連結串列,預設是迴文結構,返回true
if (head == null || head.next == null) {
return true;
}
// 遍歷連結串列,將所有結點值放到list中
List<Integer> nodes = new ArrayList<>();
while (head != null) {
nodes.add(head.val);
head = head.next;
}
// 遍歷list中的值判斷該連結串列是否是迴文結構
for (int i = 0; i < nodes.size() / 2; i++) {
// 如果不相等,則不可能是迴文結構,直接返回false。
if (!nodes.get(i).equals(nodes.get(nodes.size() - i - 1))) {
return false;
}
}
// 遍歷完成後,如果list中首尾的相應位置的值都相等,說明原連結串列是迴文結構,返回true。
return true;
}
public static void main(String[] args) {
ListNode head = ListNode.testCase5();
System.out.println("原連結串列為");
ListNode.print(head);
System.out.println("是否是迴文結構:" + isPail(head));
}
}
$1.01^{365} ≈ 37.7834343329$
$0.99^{365} ≈ 0.02551796445$
相信堅持的力量!