下面是自己实现的一个类似于LinkedList类,其中getMidNode方法是获取链表的中间节点的实现方法(在未知列表长度的情况下),大致思路如下:
1、首先在方法中定义temp 、 temp2两个局部变量。
2、temp每次循环next一次,temp2每次循环next两次,当temp2.next==null时表示temp2已经执行到达了链表的末尾,而temp刚好执行到链表的一半。
备注:此种做发的思路类似于C语言的指针操作,设立两个指针,一个单步走,一个两步走,当大步指针到达链表尾部的时候,小步指针也正好位于链表中间位置。由于本人能力有限,工作之余写一些东西分享给各位,希望对大家有所帮助,如有写得不好的地方希望各位给我留言,我并及时纠正。如你阅读之后觉得对你有所帮助,千万不要忘记鼓励一下我,麻烦顶一下哦!!!废话不多说,直接上完整源代码。
package lsp.connection;
/**
* 自己实现类似于JDK的LinkedList类
*
* @author Administrator
*
* @param
*/
public class LspLinkedList {
private Node first;
private Node last;
private int size;
public int size(){
return size;
}
/**
* 添加一个节点
* @param e
*/
public void add(E e){
Node node = new Node();
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 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 temp = first;
for (int i = 0; i < index; i++) {
temp = temp.next;
}
Node before = temp.previous;
Node after = temp.next;
before.next = after;
after.previous = before;
size--;
}
}
/**
* 获取链表的中间节点(在未知链表长度的情况下)
* @return
*/
public E getMidNode(){
if(first != null){
Node temp = first;
Node 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 lspLinkedList = new LspLinkedList();
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
*/
public class Node {
Node previous;
E item;
Node next;
public Node() {
}
public Node(E item, Node previous, Node next) {
super();
this.item = item;
this.previous = previous;
this.next = next;
}
}
项目
方法
Uc8AR
wGBD91288
CTre6
2008-01-28 15:34:42
o8ox1
2008.09.13 05-32-53
UF4Y8
25MIc2960