一、题目
题目:234. 回文链表
难度:简单
地址:https://leetcode-cn.com/problems/palindrome-linked-list/
使用语言:Java
二、代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
ListNode leftNode = null;
public boolean isPalindrome(ListNode head) {
leftNode = head;
return reverse(leftNode);
}
boolean reverse(ListNode rightNode){
if(rightNode == null){
return true;
}
boolean res = reverse(rightNode.next);
// 判断递归返回值 并且 左右节点的值相等
res = res && (rightNode.val == leftNode.val);
// 左节点没有进行递归 因此进行手动的后移
leftNode = leftNode.next;
return res;
}
}
三、细节注意
二叉树常用的几种遍历方法
void treverse(TreeNode root){
// 前序遍历代码
treverse(root.left);
// 中序遍历代码
treverse(root.right);
}
链表的遍历
在labuladong的算法小抄中提到:链表兼具递归结构,树结构不过是链表的衍生
。
因此,链表其实也可以有前序遍历和后序遍历
void linkedreverse(ListNode head){
// 前序遍历代码
linkedreverse(head.next);
// 后序遍历代码
}