双链表的反转
接着上回,这次用双链表做一个巩固,有如下功能:定义双链表、生成双链表和双链表反转构成
双链表
双链表定义,参见百度。
简要的说,每个结点构成:元素+指针,以及双向循环的特点。(用代码来说)
public class DoubleNode {
public int value;
public DoubleNode last;
public DoubleNode next;
public DoubleNode(int value){
this.value = value;
}
}
双链表生成
生成双链表。核心是构造双向循环,即前驱和后继节点,。与单链表相同的是,需要有一个链表的head,整个链表也需要从head开始,即return是head。
public static DoubleNode generateRandomDoubleLinkedList(int len ,int value){
DoubleNode head = null;
DoubleNode pre = null;
while (len != 0 ){
DoubleNode current = new DoubleNode((int)(Math.random()*(value+1)));
if (head == null) {
head = current;
pre = head;
}else{
pre.next = current;
head.last = pre;
pre = current;
}
len--;
}
return head;
}
双链表反转
反转就是让链尾变成head,那么从第一个元素和指针开始遍历,让指针指向上一个,让元素变成下一个(即head)。这个部分操作与单链表相同的是前驱节点的操作,不同的是多了后继节点的操作。
public static DoubleNode reverserDoubleLinkedList(DoubleNode head){
DoubleNode pre = null;
DoubleNode next = null;
while(head != null){
next = head.next;
head.next=pre;
head.last = next;
pre = head;
head = next;
}
return pre;
}
反思&总结
目前荏苒处于恶补基础阶段,希望这个阶段持续2~3周。届时,会更新下一个系列,就是基于LeetCode上面的题目由简到繁;另外,已经申请仓颉语言,后续这些系列都会加上仓颉编程语言