package com.java.dataStruct;
//节点类
public class Node<E> {
E item;
Node next;
public Node(){
}
public Node(E element){
this.item = element;
}
public Node(E element, Node next){
this.item = element;
this.next = next;
}
}
Node p1,r1;
Node L1 = new Node<String>("head");
r1 = L1;
// 先利用尾插法创建一个链表
for(int i=1; i<=20; i++){
p1 = new Node<String>();
p1.item = "value"+i;
r1.next = p1;
r1 = p1;
}
r1.next = null;
// while(L1.next != null){
// //System.out.p1r1intln(L.item);
// System.out.println(L1.next.item);
// L1 = L1.next;
// }
/*
* 快速找到未知长度单链表的中间节点
*
* 快慢指针原理
* 设置两个指针 search,mid都指向单链表的头节点。
* 其中search的移动速度是mid的2倍。
* 当search指向末尾节点的时候,mid正好就在中间了。
*/
Node search,mid;
search = L1;
mid = L1;
for(;search.next != null;){
if(search.next.next != null){
search = search.next.next;
mid = mid.next;
}else{
search = search.next;
}
}
System.out.println("结果: "+mid.item);
相关推荐
快速找到未知长度单链表的中间节点 普通的方法很简单,首先遍历一遍单链表以确定单链表的长度L。然后再次从头节点出发循环L/2次找到单链表的中间节点。算法复杂度为O(L+L/2)=O(3L/2)。
用c语言描述的线形表---链表---带头节点单链表的就地逆置
删除节点通常需要找到前一个节点,然后更新其`next`指针: ```c // 删除指定值的节点 void deleteNode(Node** head, int key) { Node* temp = *head; Node* prev; if (temp != NULL && temp->data == key) { *...
### 快慢指针证明带环单链表 在计算机科学中,单链表是一种常见的数据结构,由一系列节点组成,每个节点包含一个数据元素和...在解决其他与链表相关的复杂问题时,快慢指针的思想也非常有用,比如找到环的入口节点等。
单链表是一种线性数据结构,其中每个元素(称为节点)包含一个数据部分和一个指向下一个节点的指针。 首先,我们来看如何创建一个单链表。在提供的代码中,`CreatList`函数用于生成单链表。它从用户那里接收输入,...
1. **单链表**:单链表是一种基本的数据结构,其中每个节点包含一个数据元素和一个指向下一个节点的指针。在C语言中,可以使用结构体来表示节点。 2. **结构体定义**:`ListNode` 结构体包含了两个成员,`data` ...
单链表允许我们在每个桶中维护一个节点列表,每个节点包含关键字及其相关数据,以及指向下一个冲突节点的指针。这种结构使得我们可以遍历链表来找到或插入正确的元素,虽然这会增加查找的时间复杂度至O(n),但在...
数据结构-----单链表的操作------带头节点
快慢链表和快慢指针是一种常见的数据结构和算法设计模式,广泛应用于各种面试题中,例如腾讯的一道面试题:如何快速找到位置长度单链表的中间节点?本文将详细介绍快慢链表和快慢指针的原理、实现和应用。 快慢链表...
单链表是由一系列节点组成的,每个节点包含两部分:数据域和指针域。数据域存储实际的数据,而指针域则存储指向下一个节点的引用。链表的最后一个节点的指针域为NULL,表示链表的结束。 在单链表中进行按值查找的...
单链表是一种链式存储结构,它由多个节点组成,每个节点包含一个值和一个指向下一个节点的指针。单链表的节点可以是静态的,也可以是动态的。 在这个问题中,我们需要首先按照输入的逆位序建立一个单链表。这个过程...
在Java中,判断单链表是否有环的经典方法是使用Floyd的“龟兔赛跑”算法,也称为快慢指针法。这种方法利用两个指针,一个每次走一步(称为慢指针),另一个每次走两步(称为快指针)。如果链表中存在环,那么快指针...
### C++实现带头节点的单链表 #### 概述 本篇文章主要介绍如何使用C++来实现一个带有头节点的单链表。单链表是一种基本的数据结构,在计算机科学中有着广泛的应用,例如用于存储有序的数据集合或作为其他更复杂...
要删除单链表的倒数第n个节点,我们首先需要遍历链表,找到倒数第n+1个节点,然后将该节点的next指针指向倒数第n个节点的next,从而完成删除操作。这里的关键在于如何有效地找到目标节点,而不必遍历整个链表两次。...
它是一种线性的、非连续的数据组织形式,每个元素称为节点,每个节点包含数据和一个指向下一个节点的指针。本篇文章将深入探讨单链表的创建、插入和删除操作。 一、单链表的创建 在C语言中,首先需要定义一个结构体...
环形链表是一种特殊的链表,其中最后一个节点的`next`指针不是指向`None`,而是指向链表中的另一个节点,形成了一个环状结构。本题的目标是找到链表中环的入口节点,如果没有环,则返回`None`。这个问题通常使用快慢...
无头节点单链表的实现可是说是对C语言指针一个最直接、最贴合实际、也是最具有归纳性的程序设计应用。许多C语言基础面试题都涉及单链表的实现和构造,其目的就是考察面试者对C语言基础数据类型是否有足够的了解,对...
在数据结构的学习中,单链表是一种基础且重要的数据结构,它由一系列节点组成,每个节点包含数据元素和指向下一个节点的指针。本题目要求实现一个不带头节点的单链表倒置的算法,这是一个典型的链表操作问题,旨在...
单链表是一种基础的数据结构,常用于存储线性序列数据,其每个节点包含数据和一个指向下一个节点的指针。在单链表中,头部插入节点是常见的操作之一,尤其在面试和笔试中常被用来考察对数据结构的理解和编程能力。 ...