![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
链表
蓝色海洋oO
三人行,必有我师焉
展开
-
顺序表和链表(包括双向链表)代码总结
顺序表的实现: public class MyArrayList { public int usedSize; public int[] elem; public final int CAPACITY = 10; public MyArrayList() { this.usedSize = 0; this.elem = new i...原创 2019-11-09 13:11:09 · 199 阅读 · 0 评论 -
复制带随机指针的链表(深拷贝)
题目来源:LeetCode(力扣) 给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。 要求返回这个链表的深拷贝。 思路: 分三步走,首先,将新老链表相互间隔的串为一个链表;然后,处理random指针域;最后,将老新链表拆开,并返回对应的链表头结点。 /* // Definition for a Node. class Node { public ...原创 2019-11-06 20:38:09 · 533 阅读 · 0 评论 -
环形链表
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 题目来源:力扣 思路:先用快慢指针法判断链表是否有环,求出快慢指针相遇点,再想办法求出入环点。 public ListNode detectCycle(ListNode head) { //思路:快慢指针法 ListNode slow = head; ListNod...原创 2019-08-07 18:51:58 · 94 阅读 · 0 评论 -
相交链表
编写一个程序,找到两个单链表相交的起始节点。 题目来源:LeetCode 暴力求解法,代码写的比较挫 public ListNode getIntersectionNode(ListNode headA, ListNode headB) { //计算两个链表的长度,并求差值 ListNode l1 = headA; ListNode l2 = he...原创 2019-08-07 14:02:55 · 81 阅读 · 0 评论 -
链表的回文结构
判断一个链表是否是回文结构,返回 true 或者 false 思路是快慢指针和反转链表(后半部分),再进行比较 题目来源:牛客网 import java.util.*; /* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val;...原创 2019-08-07 12:43:25 · 102 阅读 · 0 评论 -
合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 题目来源:LeetCode public ListNode mergeTwoLists(ListNode l1, ListNode l2) { ListNode...原创 2019-08-06 17:32:10 · 84 阅读 · 0 评论 -
链表中倒数第k个结点
题目来源:牛客网(NowCoder) 输入一个链表,输出该链表中倒数第k个结点。 public ListNode FindKthToTail(ListNode head,int k) { ListNode node = head; int len = 0; for (; head != null; head = head.next) { ...原创 2019-08-06 13:17:00 · 84 阅读 · 0 评论 -
移除链表元素
删除链表中等于给定值 val 的所有节点。 实例: 输入: 1->2->6->3->4->5->6, val = 6 输出: 1->2->3->4->5 class Solution { public ListNode removeElements(ListNode head, int val) { ListNod...原创 2019-07-26 22:06:24 · 71 阅读 · 0 评论 -
反转链表
反转一个单链表 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 思路:所谓的单链表反转,就是把每个结点的指针域由原来的指向下一个节点变为指向其前一个节点。但由于单链表没有指向前一个结点的指针域,因此我们需要增加一个指向前一个结点的结点prev,用于存储每一个结点的前一个结点。此外,...原创 2019-07-26 22:30:18 · 100 阅读 · 0 评论 -
删除链表中的节点,链表的中间结点
题目来源:LeetCode 删除链表中的节点 (使用替换思想) class Solution { public void deleteNode(ListNode node) { node.val = node.next.val; node.next = node.next.next; //思路:把下一个节点的值赋给当前节点,然后将当前节点指向下下...原创 2019-07-26 22:36:39 · 108 阅读 · 0 评论 -
链表分割
题目描述 题目来源:牛客网 编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前 给定一个链表的头指针 ListNode* pHead,请返回重新排列后的链表的头指针。 注意:分割以后保持原来的数据顺序不变。 思路: 定义两个新链表,分别存放比x小的元素以及大于等于x的元素,分情况讨论,最后将两个链表连接起来。 第一次在牛客网写这个代码,还是出了不少问题的,最...原创 2019-07-26 23:31:56 · 111 阅读 · 0 评论