单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始;链表是使用指针进行构造的列表;又称为结点列表,因为链表是由一个个结点组装起来的;其中每个结点都有指针成员变量指向列表中的下一个结点;
单向链表:
/**
* 单向链表
*/
public class ListNode {
Integer val;
ListNode next; //下一个节点
public ListNode(Integer x) { val = x; }
}
/**
* 创建一个单向链表结构
* 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9
*/
public class ListDemo {
public static void main(String[] args) {
//创建链表
ListNode listNodeTmp = new ListNode(-1);
ListNode listNodeStart = listNodeTmp;
for (int i = 1; i < 10; i++) {
ListNode listNode = new ListNode(i);
listNodeTmp.next = listNode;
listNodeTmp = listNode;
}
//打印链表
ListNode listNodeQuery = listNodeStart.next; //listNodeQuery相当于指针,指向哪个节点
StringBuilder stringBuilder = null;
while(listNodeQuery !=null){ //指向位置是否为空
if(stringBuilder == null){
stringBuilder = new StringBuilder();
stringBuilder.append(listNodeQuery.val);
}else{
stringBuilder.append(" -> "+ listNodeQuery.val);
}
listNodeQuery = listNodeQuery.next; // 指向下一个节点
}
System.out.println(stringBuilder.toString());
}
}
运行结果:
双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。
双向链表:
public class DoubleListNode {
Integer val;
DoubleListNode next; //下一个节点
DoubleListNode pro; //上一个节点
public DoubleListNode(Integer x) { val = x; }
}
/**
* 创建一个双向向链表结构(1 指向 2 的同时2 也指向 1)
* 1 2 3 4 5 6
*/
public class DoubleListDemo {
public static void main(String[] args) {
//创建链表
DoubleListNode doubleListNodeTmp = new DoubleListNode(-1);
DoubleListNode doubleListNodeStart = doubleListNodeTmp;
for (int i = 1; i < 10; i++) {
DoubleListNode doubleListNode = new DoubleListNode(i);
doubleListNodeTmp.next = doubleListNode;
doubleListNode.pro = doubleListNodeTmp;
doubleListNodeTmp = doubleListNode;
}
DoubleListNode doubleListNodeQuery = doubleListNodeStart.next.next.next; //指向3的位置
//获取自身
System.out.println("节点自身:"+doubleListNodeQuery.val);
//获取上一个节点.
System.out.println("上一个节点:"+doubleListNodeQuery.pro.val);
//获取下一个节点.
System.out.println("下一个节点:"+doubleListNodeQuery.next.val);
}
}
运行结果:
https://www.cnblogs.com/jssj/tag/java/default.html