题解 | #判断一个链表是否为回文结构#
判断一个链表是否为回文结构
http://www.nowcoder.com/practice/3fed228444e740c8be66232ce8b87c2f
思路,链表反转后逐一比较
注意的是:链表不能直接反转,否则结构发生变化,需要新复制一个链表进行操作
import java.util.*;
public class Solution {
//反转链表指针
ListNode reverse(ListNode head) { //反转链表,链表结构会发生变化
//前序节点
ListNode prev = null;
while(head != null){
//断开后序
ListNode next = head.next;
//指向前序
head.next = prev;
prev = head;
head = next;
}
return prev;
}
public boolean isPail(ListNode head) {
ListNode dummyHead = new ListNode(-1);//定义一个新链表
//copy orgin list to p1
ListNode p1 = dummyHead;
ListNode p2 = head;
while (p2 != null) {//将链表复制给新链表,不能动原链表
p1.next = new ListNode(p2.val);
p2 = p2.next;
p1 = p1.next;
}
//traverse the orgin list and reversed list
p1 = dummyHead.next;
p2 = reverse(head);
while (p1 != null ) {
if (p1.val != p2.val) {
return false;
}
p1 = p1.next;
p2 = p2.next;
}
return true;
}
}