怎样做网站平台赚钱,wordpress媒体分类,wordpress旅游插件,成都做网站的工资多少力扣题目#xff1a;回文链表
开篇 今天是备战蓝桥杯的第23天。我加入的编程导航算法通关村也在今天开营啦#xff01;那从现在起#xff0c;我的算法题更新会按照算法村的给的路线更新#xff0c;更加系统。大家也可以关注我新开的专栏“算法通关村”。里面会有更全面的知… 力扣题目回文链表
开篇 今天是备战蓝桥杯的第23天。我加入的编程导航算法通关村也在今天开营啦那从现在起我的算法题更新会按照算法村的给的路线更新更加系统。大家也可以关注我新开的专栏“算法通关村”。里面会有更全面的知识点和题目的分享。
题目链接: 234.回文链表
题目描述 代码思路1
1.一开始写的时候感觉在链表里操作太麻烦了就利用list集合把链表里的元素存起来然后在链表里判断就行也可以放数组里 2.既然存在集合里那回文数的判断就轻轻松松喽。这里我使用左右指针一个在头一个在尾两个指针同时往中间移动只要有一次两个指针对应的数据不相等则不是回文
代码纯享版
/*** 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 {public boolean isPalindrome(ListNode head) {ListInteger list new ArrayList();ListNode node head;while(node ! null){list.add(node.val);node node.next;}int left 0, right list.size() - 1;while(left right){if(list.get(left) ! list.get(right)) return false;left;right--;}return true;}
}代码逐行解析版
class Solution {public boolean isPalindrome(ListNode head) {ListInteger list new ArrayList(); //创建list集合ListNode node head; //创建结点node指向头结点while(node ! null){ //当node不为空时list.add(node.val); //将该结点添加到集合中node node.next; //node指向下一个结点}int left 0, right list.size() - 1; //创建左右指针分别指向集合到开头和结尾while(left right){ //循环条件是两个指针相遇前if(list.get(left) ! list.get(right)) return false; //两个指针对应的数如果不相等则不是回文返回falseleft; //左指针右移right--; //右指针左移}return true;//没有false的情况返回true}
}代码思路2
上面第一种方法被算法村的讲义说是逃避链表面试不能这样只能含泪考虑其他思路。 第二种思路是利用栈后进先出的特点先把整个链表压入栈中然后同时遍历链表和输出栈顶元素一一比较不相同则不是回文数
代码纯享版
/*** 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 {public boolean isPalindrome(ListNode head) {StackInteger stack new Stack(); ListNode node head;while(node ! null){stack.push(node.val);node node.next;}node head;while(node ! null){if(stack.pop() ! node.val) return false;node node.next;}return true;}
}
代码逐行解析版
class Solution {public boolean isPalindrome(ListNode head) {StackInteger stack new Stack(); //创建一个栈ListNode node head; //创建node结点指向头结点while(node ! null){ //node不为空时stack.push(node.val);//把node结点的值压入栈中node node.next; //node指向下一个结点}node head; //node重新指向头结点while(node ! null){ //node不为空时if(stack.pop() ! node.val) return false; //栈顶元素出栈如果栈顶元素与node结点的值不相等返回falsenode node.next; //node指向下一个结点}return true;//没有false的情况返回true}}
结语 如果这道题的分享对您有所帮助点个关注我会每天更新力扣题的讲解与大伙儿一起向前迈进