题解 | #判断一个链表是否为回文结构#
判断一个链表是否为回文结构
https://www.nowcoder.com/practice/3fed228444e740c8be66232ce8b87c2f
import java.util.*; /* * public class ListNode { * int val; * ListNode next = null; * public ListNode(int val) { * this.val = val; * } * } */ public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 the head * @return bool布尔型 */ public boolean isPail (ListNode head) { // write code here if(head==null||head.next==null){ return true; } ListNode slow, fast; ListNode dummyNode = new ListNode(-1); ListNode stackTop = new ListNode(-1); dummyNode.next = head; slow = dummyNode; fast = dummyNode; while (true) { fast = fast.next.next; slow = slow.next; ListNode newNode = new ListNode(slow.val); System.out.println(slow.val); newNode.next = stackTop; stackTop = newNode; if (fast.next == null) { // 偶数个节点情况 break; } else if (fast.next.next == null) { // 奇数 slow = slow.next; break; } } while (slow.next != null) { slow = slow.next; if(slow.val!=stackTop.val){ return false; } stackTop = stackTop.next; } return true; } }
注意的是:快指针如果在倒数第二个节点,那么进行fast.next.next操作会抛出越界异常,所以判断的条件应该是
fast.next.next!=null