本文主要是介绍力扣算题【第二期】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 1.反转链表
- 1.1 算法题目
- 1.2 算法思路
- 1.3 代码实现
- 2.回文链表
- 2.1 算法题目
- 2.2 算法思路
- 2.3 代码实现
1.反转链表
1.1 算法题目
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
1.2 算法思路
1.设置工作指针p,来遍历链表。
2.采用头插法的方法来实现链表翻转。
1.3 代码实现
class Solution {public ListNode reverseList(ListNode head) {ListNode p,q;p=head.next;head.next=null;while(p!=null){q=p.next;p.next=head.next;head.next=p;p=q;}return head;}
}
2.回文链表
2.1 算法题目
给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。
2.2 算法思路
1.设置快慢指针,当快指针到达链表的末尾时,慢指针正好在链表的中间后者下一个位置。
2.通过翻转链表使得slow指针指向翻转后链表的第一个元素。同时将fast指针也指向当前链表的第一个指针。
3.通过循环判断slow指针和fast指针指向的值是否相同。
2.3 代码实现
class Solution {public boolean isPalindrome(ListNode head) {ListNode fast=head,slow=head;while(fast!=null&&fast.next!=null){fast=fast.next.next;slow=slow.next;}if(fast!=null){ //奇数链表slow=slow.next;}fast=head;slow=reverse(slow);while(slow!=null){if(fast.val!=slow.val){return false;}fast=fast.next;slow=slow.next;}return true;}//翻转链表public ListNode reverse(ListNode head){ListNode pre=null;while(head!=null){ListNode next=head.next;head.next=pre;pre=head;head=next;}return pre;}
}
这篇关于力扣算题【第二期】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!