思路
判断是否是回文,需要:一个指针指向头,一个指针指向尾,两个指针一边向中间靠拢,一边判断数值是否相同
对于单链表,不方便获得pre,如果将节点放进 数组/list ,数组/list可以直接获得索引,,那么就能方便很(注意!!这是单链表需要访问pre时,常用的解决方法)
做法:
1.链表放进list中
2.设置一个指针指向头,一个指针指向尾
3.遍历size/2遍,两个指针一边判断数值是否相同,一边向中间靠拢,
代码
import java.util.ArrayList;
import java.util.Objects;
public class Main {
public static void main(String[] args) {
}
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 {
public boolean isPalindrome(ListNode head) {
//先将所有节点放进一个list():有序,有索引,长度可变
//数组有索引,长度不可变
ArrayList<Integer> list = new ArrayList<>();
ListNode cur=head;
while (cur != null) {
list.add(cur.val);
cur = cur.next;
}
//遍历size/2遍,,一个指针指向头,,一个指针指向尾
//判断两个指针指向是否相同
int size = list.size();
int pre=0;
int last=size-1;
for (int i = 1; i <=size/2 ; i++) {
//判断两个指针指向是否相同
if (list.get(pre).equals(list.get(last))) {
//如果相同,移动指针,继续判断
pre++;
last--;
}
else{
return false;
}
}
return true;
}
}
}
记录
总结
对于单链表,如果需要获得pre,可以节点放进 数组/list ,数组/list可以直接获得索引,,那么就能方便很(注意!!这是单链表需要访问pre时,常用的解决方法)