定义
所谓链表就是指在某节点存储数据的过程中还要有一个属性用来指向下一个链表节点,这样的数据存储方式叫做链表
链表的优缺点
优点:易于存储和删除
缺点:查询起来较麻烦
java实现
下面我们用java来实现如下链表结构:
首先定义节点类:
代码块11 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| package LinkTest;
public class Node { private int value; private Node next;
public Node(int value){ this.value=value; } public int getValue() { return value; } public void setValue(int value) { this.value = value; } public Node getNext() { return next; } public void setNext(Node next) { this.next = next; } }
|
再定义一个链表类:
注意:遍历链表定义了两个方法,一个是普通方法,一个是递归方法,都可以遍历出来
代码块21 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| 代码块2
package LinkTest;
public class Link { private Node current; private Node root; public void insert(int vlaue){ Node newNode=new Node(vlaue); if(this.current==null){ this.current=newNode; this.root=this.current; }else{ this.current.setNext(newNode); this.current=this.current.getNext(); } } public void getList(){ this.current=this.root; while(this.current!=null){ System.out.print(this.current.getValue()); this.current=this.current.getNext(); if(this.current!=null){ System.out.print("------->"); } } }
public void getList2(){ DG(this.root); }
public void DG(Node node){ System.out.print(node.getValue()+"----->"); if(node.getNext()!=null){ DG(node.getNext()); }else{ return; } } }
|
测试类:
代码块31 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| package LinkTest;
public class Test { public static void main(String[] args){ Link l=new Link(); l.insert(1); l.insert(4); l.insert(5); l.insert(6); l.insert(9); l.insert(8); l.getList(); } }
|
测试类运行结果:
1
| 1------->4------->5------->6------->9------->8
|
这样我们就用java实现了一个简单的链表结构。
链表的翻转
所谓链表翻转,就是让原来的链表元素倒过来,比如:
1------->4------->5------->6------->9------->8
翻转后就变成了:
8------->9------->6------->5------->4------->1
代码实现:
代码块41 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| static Node reserve(Node node) { if (node == null || node.getNext() == null) { return node; }
Node prev = null; Node next = null;
while (node != null) { next = node.getNext();
node.getNext() = prev; prev = node;
node = next; } return prev; }
|
将一个链表丢到上述方法中,就会返回一个顺序颠倒的结果出来。