题意:判断链表是否对称的,要求时间复杂度为O(n),空间复杂度为O(1)
思路:先计算链表结点数,然后将前半链表反转,然后再比较将半部和后半部是否相等
代码如下:
class ListNode
{
int val;
ListNode next;
ListNode(int x) { val = x;}
}
class Solution
{
public boolean isPalindrome(ListNode head)
{
int nodeCount = 0;
ListNode p = head;
while (p != null)
{
nodeCount++;
p = p.next;
}
ListNode current = head;
ListNode pre = null;
ListNode tmp = null;
for (int i = 0; i < nodeCount / 2; i++)
{
tmp = current.next;
current.next = pre;
pre = current;
current = tmp;
}
if (1 == nodeCount % 2) current = current.next;
for (int i = 0; i < nodeCount / 2; i++)
{
if (pre.val != current.val) return false;
else
{
pre = pre.next;
current = current.next;
}
}
return true;
}
}