链表OJ题(中)

简介: 链表OJ题(中)

每日一练链表的回文结构_牛客题霸_牛客网 (nowcoder.com)


8dc92bdf7a6f4e639affd028403a7e1a.png

   解题思路:

回文分为两种情况,一种是奇数节点的链表,一种是偶数节点的链表,大致思路是先找到链表的中间节点,再让中间节点以后的节点指向反转,再定义左右指针,相向而行,判断链表是否回文,如图:

db489b80ae764716bf503181de98bb80.png

publicclassPalindromeList {
publicbooleanchkPalindrome(ListNodehead) {
if(head==null){
returnfalse;
        }
if(head.next==null){
returntrue;
        }
//找到中间节点ListNodefast=head;
ListNodeslow=head;
while(fast!=null&&fast.next!=null){
fast=fast.next.next;
slow=slow.next;
        }
//把中间节点后面的节点指向反转ListNodecur=slow.next;
while(cur!=null){
ListNodecurNext=cur.next;
cur.next=slow;
slow=cur;
cur=curNext;
        }
//让左右指针判断是否回文while(head!=slow){
if(head.val!=slow.val){
returnfalse;
            }
//判断链表偶数个节点的情况if(head.next==slow){
returntrue;
            }
head=head.next;
slow=slow.next;
        }
returntrue;
    }
}

✅每日一练:141. 环形链表 - 力扣(LeetCode)


49857d43ff5e40dda51ae5060184a773.png

解题思路:

 定义快慢指针,让fast走2步,slow走1步,判断是否成环

publicclassSolution {
publicbooleanhasCycle(ListNodehead) {
ListNodefast=head;
ListNodeslow=head;
while(fast!=null&&fast.next!=null){
fast=fast.next.next;
slow=slow.next;
if(fast==slow){
returntrue;
            }
        }
returnfalse;
    }
}

✅每日一练:160. 相交链表 - 力扣(LeetCode)


f908eb0dcedb4942a370518dd2d73b88.png解题思路:

   我们要确保两个链表同时在终点相遇,可以让长的链表先走两个链表的长度差,然后让长短链表同时走,走到终点时,判断二者尾结点的指向是否指向同一个地址,如果相等,那么肯定有相交点了:

publicclassSolution {
publicListNodegetIntersectionNode(ListNodeheadA, ListNodeheadB) {
//求链表的长度,让长的的先走长度差的绝对值数intlenA=0 ;
intlenB=0;
ListNodepl=headA;
ListNodeps=headB;
while(pl!=null){
lenA++;
pl=pl.next;
        }
while(ps!=null){
lenB++;
ps=ps.next;
        }
pl=headA;
ps=headB;
//链表的长度差intlen=lenA-lenB;
//确保len始终大于0,pl指向长的链表,ps指向短的链表if(len<0){
pl=headB;
ps=headA;
len=lenB-lenA;
        }
//让长的链表先走len步while(len--!=0){
pl=pl.next;
        }
while(pl!=ps){
pl=pl.next;
ps=ps.next;
        }
returnps;
    }
}


目录
相关文章
|
29天前
|
存储 Java
数据结构第三篇【链表的相关知识点一及在线OJ习题】
数据结构第三篇【链表的相关知识点一及在线OJ习题】
24 7
|
4月前
【数据结构OJ题】环形链表
力扣题目——环形链表
36 3
【数据结构OJ题】环形链表
|
4月前
【数据结构OJ题】复制带随机指针的链表
力扣题目——复制带随机指针的链表
51 1
【数据结构OJ题】复制带随机指针的链表
|
4月前
【数据结构OJ题】环形链表II
力扣题目——环形链表II
29 1
【数据结构OJ题】环形链表II
|
4月前
【数据结构OJ题】相交链表
力扣题目——相交链表
32 1
【数据结构OJ题】相交链表
|
4月前
【数据结构OJ题】合并两个有序链表
力扣题目——合并两个有序链表
39 8
【数据结构OJ题】合并两个有序链表
|
4月前
【数据结构OJ题】移除链表元素
力扣题目——移除链表元素
40 2
【数据结构OJ题】移除链表元素
|
4月前
【数据结构OJ题】链表中倒数第k个结点
牛客题目——链表中倒数第k个结点
32 1
【数据结构OJ题】链表中倒数第k个结点
|
4月前
【数据结构OJ题】链表分割
牛客题目——链表分割
29 0
【数据结构OJ题】链表分割
|
4月前
【数据结构OJ题】链表的回文结构
牛客题目——链表的回文结构
36 0
【数据结构OJ题】链表的回文结构