牛客網高頻演算法題系列-BM13-判斷一個連結串列是否為迴文結構
阿新 • • 發佈:2022-06-06
牛客網高頻演算法題系列-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\)
相信堅持的力量!