数据结构刷题集合—— 链表

Posted Johnny*

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构刷题集合—— 链表相关的知识,希望对你有一定的参考价值。

237. 删除链表中的节点

【题目描述】

在这里插入图片描述

237. 删除链表中的节点

【思路】
将当前节点的值修改后一个节点值,然后删除后一个节点。
要注意:这种删除方法不能删除尾结点。

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public void deleteNode(ListNode node) {
        
        node.val = node.next.val;
        node.next = node.next.next;
        
    }
}

206. 反转链表

【题目描述】

206. 反转链表

【思路】

/**
 * 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 ListNode reverseList(ListNode head) {
        

        ListNode cur = head;
        ListNode pre = null;
        while( cur != null){
            //1、暂存下一节点
            ListNode tmp = cur.next;
            //2、 当前节点next指向前一个节点
            cur.next = pre;
            //3、当前节点 和前驱节点移动
            pre = cur;
            cur = tmp;
        }
        return pre;
        
        
       

    }
}

LeetCode 141. 环形链表

【题目描述】

LeetCode 141. 环形链表
【思路】

快慢双指针,起始p和q同指向头结点。之后p走一步,q走两步,p追赶q,若为环则p、q指针循环一周必定相遇,可以得出环长为p走过的步数。如不为环,则q或q.next最后一定为尾结点

/**
 * Definition for singly-linked list.
 * class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    /*
    p追赶q,若为环则,p、q指针循环一周必定相遇
    如不为环,则q或q.next最后一定为尾结点
    */
    public boolean hasCycle(ListNode head) {
        //快慢双指针p每次走一步 q每次走两步
        ListNode p = head;
        ListNode q = head;
        if( q == null || q.next == null || q.next.next == null) return false;
        //初始时位置相同 要先走
        p = p.next;
        q = q.next.next;
        //能走到这说明节点长度都是大于2的

        //默认为不带环的链表 则终止条件为q == null
       while(q != null){
           if(q.next == null || q.next.next == null) return false;
           if(p == q) return true;
           p = p.next;
           q = q.next.next;
       }
       return false;
        
    }
}

以上是关于数据结构刷题集合—— 链表的主要内容,如果未能解决你的问题,请参考以下文章

链表刷题集合

数据结构刷题集合—— 链表

LeetCode刷题笔记-数据结构-day12

LeetCode刷题笔记-数据结构-day12

刷题整理面试常见算法题集合

LeetCode Java刷题笔记— 114. 二叉树展开为链表