Java实现查找链表的中间节点,(在未知链表长度的情况下)
2017-05-17 22:50
393 查看
下面是自己实现的一个类似于LinkedList类,其中getMidNode方法是获取链表的中间节点的实现方法(在未知列表长度的情况下),大致思路如下:
1、首先在方法中定义temp 、 temp2两个局部变量。
2、temp每次循环next一次,temp2每次循环next两次,当temp2.next==null时表示temp2已经执行到达了链表的末尾,而temp刚好执行到链表的一半。
备注:此种做发的思路类似于C语言的指针操作,设立两个指针,一个单步走,一个两步走,当大步指针到达链表尾部的时候,小步指针也正好位于链表中间位置。由于本人能力有限,工作之余写一些东西分享给各位,希望对大家有所帮助,如有写得不好的地方希望各位给我留言,我并及时纠正。如你阅读之后觉得对你有所帮助,千万不要忘记鼓励一下我,麻烦顶一下哦!!!废话不多说,直接上完整源代码。
1、首先在方法中定义temp 、 temp2两个局部变量。
2、temp每次循环next一次,temp2每次循环next两次,当temp2.next==null时表示temp2已经执行到达了链表的末尾,而temp刚好执行到链表的一半。
备注:此种做发的思路类似于C语言的指针操作,设立两个指针,一个单步走,一个两步走,当大步指针到达链表尾部的时候,小步指针也正好位于链表中间位置。由于本人能力有限,工作之余写一些东西分享给各位,希望对大家有所帮助,如有写得不好的地方希望各位给我留言,我并及时纠正。如你阅读之后觉得对你有所帮助,千万不要忘记鼓励一下我,麻烦顶一下哦!!!废话不多说,直接上完整源代码。
package lsp.connection; /** * 自己实现类似于JDK的LinkedList类 * * @author Administrator * * @param <E> */ public class LspLinkedList<E> { private Node<E> first; private Node<E> last; private int size; public int size(){ return size; } /** * 添加一个节点 * @param e */ public void add(E e){ Node<E> node = new Node<E>(); if(first == null){ node.previous = null; node.item = e; node.next = null; first = node; last = node;//首尾节点为同一个 }else { //直接向last中插入下一节点 node.previous = last; node.item = e; node.next = null; //给last的下一节点赋值为当前传入的节点值 last.next = node; //重新给last节点赋值 last = node; } size++; } /** * 根据index获取节点 * @param index * @return */ public E get(int index){ if(first != null){ Node<E> temp = first; for (int i = 0; i < index; i++) { temp = temp.next; } return temp.item; } return null; } /** * 根据index删除节点元素 * @param index */ public void remove(int index){ if(first != null){ Node<E> temp = first; for (int i = 0; i < index; i++) { temp = temp.next; } Node<E> before = temp.previous; Node<E> after = temp.next; before.next = after; after.previous = before; size--; } } /** * 获取链表的中间节点(在未知链表长度的情况下) * @return */ public E getMidNode(){ if(first != null){ Node<E> temp = first; Node<E> temp2 = temp.next; while(temp.next != null && temp2.next != null){ temp = temp.next; temp2 = temp2.next; if(temp2.next != null){ temp2 = temp2.next; } } return temp.item; } return null; } public static void main(String[] args) { LspLinkedList<String> lspLinkedList = new LspLinkedList<String>(); lspLinkedList.add("111"); lspLinkedList.add("222"); lspLinkedList.add("333"); lspLinkedList.add("444"); lspLinkedList.add("555"); System.out.println(lspLinkedList.getMidNode()); } }
package lsp.connection; /** * 节点类 * @author Administrator * * @param <E> */ public class Node<E> { Node<E> previous; E item; Node<E> next; public Node() { } public Node(E item, Node<E> previous, Node<E> next) { super(); this.item = item; this.previous = previous; this.next = next; } }
相关文章推荐
- 单链表长度未知,快速找到其中间节点----不错的解决方案
- 快速查找未知长度单链表的中间节点
- 给定一个单向链表(长度未知),请设计一个既节省时间又节省空间的算法来找出该链表中的倒数第m个元素。实现这个算法,并为可能出现的特例情况安排好处理措施。“倒数第m个元素”是这样规定的:当m=0时,链表的
- 快速找出长度未知链表的中间节点(快慢指针)
- 快速查找长度未知的单链表的中间结点
- java实现创建链表以及插入节点,查找结点,删除节点等操作
- 快速查找未知长度单链表的中间节点
- 【java数据结构与算法学习】快慢指针---快速找到未知长度单链表的中间节点
- 建立一个带附加头结点的单链表.实现测长/打印/删除结点/插入结点/逆置/查找中间节点/查找倒数第k个节点/判断是否有环
- (学习java)写一个完整的程序,实现随机生成20个元素的链表,快速查找中间结点的值并显示
- 单链表的创建和遍历、求单链表中节点的个数、查找单链表中的中间结点、判断单链表是否有环、取出有环链表中环的长度,删除有序链表中的重复结点
- 【面试题】-求未知长度的链表的中间节点(快慢指针)
- Java实现寻找链表的中间节点
- 快速找到未知长度单链表的中间节点
- 查找链表的中间节点
- 编码实现环状单向链表(尾指针直接指向头指针,中间没有空节点),去除连续的重复元素的操作。
- 编码实现环状单向链表(尾指针直接指向头指针,中间没有空节点),去除连续的重复元素的操作
- java 实现节点链表
- 【经典问题】快速找到未知长度单链表的中间节点
- 单链表在不知道链表长度的前提下求链表中间节点【待补充】