欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > 数据结构基础之《(16)—链表题目》

数据结构基础之《(16)—链表题目》

2025/4/17 0:47:51 来源:https://blog.csdn.net/csj50/article/details/145308121  浏览:    关键词:数据结构基础之《(16)—链表题目》

一、链表问题

1、对于笔试,不用太在乎空间复杂度,一切为了时间复杂度
2、对于面试,时间复杂度依然放在第一位,但是一定要找到空间最省的方法

二、快慢指针

逻辑:
慢指针一次走1步
快指针一次走2步
当快指针走完的时候,慢指针应该来到中点的位置

1、输入链表头节点,奇数长度返回中点,偶数长度返回上中点

2、输入链表头节点,奇数长度返回中点,偶数长度返回下中点

3、输入链表头节点,奇数长度返回中点前一个,偶数长度返回上中点前一个

4、输入链表头节点,奇数长度返回中点前一个,偶数长度返回下中点前一个

package class06;import java.util.ArrayList;/*** 快慢指针*/
public class Code01_LinkedListMid {public static class Node {public int value;public Node next;public Node(int v) {value = v;}}/*** 奇数情况返回中点,偶数情况返回上中点* @param head:头节点* @return*/public static Node midOrUpMidNode(Node head) {if (head == null || head.next == null || head.next.next == null) {return head;}// 链表有3个点或以上Node slow = head.next;Node fast = head.next.next;while (fast.next != null && fast.next.next != null) {slow = slow.next;fast = fast.next.next;}return slow;}/*** 奇数情况返回中点,偶数情况返回下中点* @param head:头节点* @return*/public static Node midOrDownMidNode(Node head) {if (head == null || head.next == null) {return head;}// 初始设置不一样Node slow = head.next;Node fast = head.next;while (fast.next != null && fast.next.next != null) {slow = slow.next;fast = fast.next.next;}return slow;}/*** 奇数情况返回中点前一个,偶数情况返回上中点前一个* @param head:头节点* @return*/public static Node midPreOrUpMidPreNode(Node head) {if (head == null || head.next == null || head.next.next == null) {return null;}Node slow = head;Node fast = head.next.next;while (fast.next != null && fast.next.next != null) {slow = slow.next;fast = fast.next.next;}return slow;}/*** 奇数情况返回中点前一个,偶数情况返回下中点前一个* @param head:头节点* @return*/public static Node midPreOrDownMidPreNode(Node head) {if (head == null || head.next == null) {return null;}if (head.next.next == null) {return head;}Node slow = head;Node fast = head.next;while (fast.next != null && fast.next.next != null) {slow = slow.next;fast = fast.next.next;}return slow;}public static Node right1(Node head) {if (head == null) {return head;}Node cur = head;ArrayList<Node> arr = new ArrayList<>();while (cur != null) {arr.add(cur);cur = cur.next;}return arr.get((arr.size() - 1) / 2);}public static Node right2(Node head) {if (head == null) {return null;}Node cur = head;ArrayList<Node> arr = new ArrayList<>();while (cur != null) {arr.add(cur);cur = cur.next;}return arr.get(arr.size() / 2);}public static Node right3(Node head) {if (head == null || head.next == null || head.next.next == null) {return null;}Node cur = head;ArrayList<Node> arr = new ArrayList<>();while (cur != null) {arr.add(cur);cur = cur.next;}return arr.get((arr.size() - 3) / 2);}public static Node right4(Node head) {if (head == null || head.next == null) {return null;}Node cur = head;ArrayList<Node> arr = new ArrayList<>();while (cur != null) {arr.add(cur);cur = cur.next;}return arr.get((arr.size() - 2) / 2);}public static void main(String[] args) {Node head = new Node(0);Node tail = head;for (int i = 1; i < 10; i++) {Node node = new Node(i);tail.next = node;tail = tail.next;}System.out.println(midOrUpMidNode(head).value);System.out.println(right1(head).value);System.out.println(midOrDownMidNode(head).value);System.out.println(right2(head).value);System.out.println(midPreOrUpMidPreNode(head).value);System.out.println(right3(head).value);System.out.println(midPreOrDownMidPreNode(head).value);System.out.println(right4(head).value);}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词