• LeetCode--[链表]--不定时更新


    1._237_删除链表中的节点

    1.1链接

    https://leetcode-cn.com/problems/delete-node-in-a-linked-list/

    1.2题目描述

     1.3代码实现

    package 链表;
    
    /**
     * https://leetcode-cn.com/problems/delete-node-in-a-linked-list/
     * @author MJ Lee
     *
     */
    public class _237_删除链表中的节点 {
        
        public void deleteNode(ListNode node) {
            node.val = node.next.val;
            node.next = node.next.next;
        }
    }
    View Code

    2._206_反转链表

    2.1链接

    https://leetcode-cn.com/problems/reverse-linked-list/

    2.2题目描述

    2.3解决思路

     

    2.3.1递归方式

    代码实现

     java版本

        public ListNode reverseList(ListNode head) {
            if (head == null || head.next == null) return head;
        
            ListNode newHead = reverseList(head.next);
            head.next.next = head;
            head.next = null;
            return newHead;
        }
    View Code

     python版本

    class Node(object):
        def __init__(self, value=None, next=None):
            self.value = value
            self.next = next
    ###递归方式
    def reverse2(head):
         if head.next == None:  # 递归停止的基线条件
              return head
         new_head = reverse2(head.next)
         head.next.next = head    # 当前层函数的head节点的后续节点指向当前head节点
         head.next = None    # 当前head节点指向None
         return new_head
    
    
    link = Node(1, Node(2, Node(3, Node(4, Node(5, Node(6, Node(7, Node(8, Node(9)))))))))
    root = reverse2(link)
    while root:
            print(root.value)
            root =root.next
    View Code

    2.3.2非递归方式

    代码实现 

    java版本

    public ListNode reverseList2(ListNode head) {
            if (head == null || head.next == null) return head;
        
            ListNode newHead = null;
            while (head != null) {
                //tmp的作用临时变了 保存变量值 防止节点引用断裂 从而被gc误删
                ListNode tmp = head.next;
                head.next = newHead;
                newHead = head;
                head = tmp;
            }
            
            return newHead;
        }
    View Code

     python版本

    class Node(object):
        def __init__(self, value=None, next=None):
            self.value = value
            self.next = next
    ###循环方式
    def reverse(head):
        cur_node = head  # 当前节点
        new_link = None  # 表示反转后的链表
        while cur_node != None:
            tmp = cur_node.next  # cur_node后续节点传递给中间变量
            cur_node.next = new_link    # cur_node指向new_link
            new_link = cur_node    # 反转链表更新,cur_node为新的头结点
            cur_node = tmp    # 原链表节点后移一位
        return new_link
    link = Node(1, Node(2, Node(3, Node(4, Node(5, Node(6, Node(7, Node(8, Node(9)))))))))
    root = reverse2(link)
    while root:
            print(root.value)
            root =root.next
    View Code

    3._141_环形链表

    3.1链接

    https://leetcode-cn.com/problems/linked-list-cycle/

    3.2题目描述

    3.3解决思路

    快慢指针

     

     

    3.4代码实现

    java版本

    public class _141_环形链表 {
        
        public boolean hasCycle(ListNode head) {
            if (head == null || head.next == null) return false;
            
            ListNode slow = head;
            ListNode fast = head.next;
            while (fast != null && fast.next != null) {
                slow = slow.next;
                fast = fast.next.next;
                
                if (slow == fast) return true;
            }
            
            return false;
        }
        
    }
    View Code

    4.约瑟夫问题

    4.1链接

    https://blog.csdn.net/weixin_38214171/article/details/80352921?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

    4.2题目描述

     

    4.3解决思路

    用循环链表解决

    4.4代码实现

    java版本

    static void josephus() {
            CircleLinkedList<Integer> list = new CircleLinkedList<>();
            for (int i = 1; i <= 8; i++) {
                list.add(i);
            }
            
            // 指向头结点(指向1)
            list.reset();
            
            while (!list.isEmpty()) {
                list.next();
                list.next();
                System.out.println(list.remove());
            }
        }
    View Code

    X._XXX_

    x.1链接

    x.2题目描述

    x.3解决思路

    x.4代码实现

    java版本

    X._XXX_

    x.1链接

    x.2题目描述

    x.3解决思路

    x.4代码实现

    java版本

    X._XXX_

    x.1链接

    x.2题目描述

    x.3解决思路

    x.4代码实现

    java版本

    X._XXX_

    x.1链接

    x.2题目描述

    x.3解决思路

    x.4代码实现

    java版本

    X._XXX_

    x.1链接

    x.2题目描述

    x.3解决思路

    x.4代码实现

    java版本

    X._XXX_

    x.1链接

    x.2题目描述

    x.3解决思路

    x.4代码实现

    java版本

    X._XXX_

    x.1链接

    x.2题目描述

    x.3解决思路

    x.4代码实现

    java版本

    X._XXX_

    x.1链接

    x.2题目描述

    x.3解决思路

    x.4代码实现

    java版本

    X._XXX_

    x.1链接

    x.2题目描述

    x.3解决思路

    x.4代码实现

    java版本

    X._XXX_

    x.1链接

    x.2题目描述

    x.3解决思路

    x.4代码实现

    java版本

    X._XXX_

    x.1链接

    x.2题目描述

    x.3解决思路

    x.4代码实现

    java版本

        public boolean hasCycle(ListNode head) {
            if (head == null || head.next == null) return false;
            
            ListNode slow = head;
            ListNode fast = head.next;
            while (fast != null && fast.next != null) {
                slow = slow.next;
                fast = fast.next.next;
                
                if (slow == fast) return true;
            }
            
            return false;
        }
    View Code
  • 相关阅读:
    php--url操作
    css学习--细节总结
    css学习--盒子模型
    C语言编程 产生一个随机数
    C语言数据结构 链表总结
    C语言数据结构 双向链表以及基本功能实现
    C语言数据结构 单链表及其基本功能实现
    C语言数据结构 线性表的基本功能实现
    C语言编程 找出数列中只出现一次的两个数
    JAVA编程练习 创建风扇对象(开关 风速等)
  • 原文地址:https://www.cnblogs.com/ggnbnb/p/12166005.html
Copyright © 2020-2023  润新知