package wsj;
/**
* 当前类所有函数
* -------------
* 生成单向链表:buildList()
* 打印单向链表:printList()
* 反转单向链表:reverseList()
*
* 生成双向链表:buildDoubleList()
* 打印双向链表:printList()
* 反转双向链表:reverseList()
*/
// 定义单向链表节点
class Node {
public int value;
public Node next;
public Node(int data) {
this.value = data;
}
}
// 定义双向链表节点
class DoubleNode {
public int value;
public DoubleNode next;
public DoubleNode last;
public DoubleNode(int data) {
this.value = data;
}
}
public class MyList {
// 生成单向链表
public static Node buildList(int[] arr) {
if (arr == null) {
return null;
}
Node head = new Node(arr[0]);
Node p = head;
for (int i = 1; i < arr.length; i++) {
p.next = new Node(arr[i]);
p = p.next;
}
return head;
}
// 生成双向链表
public static DoubleNode buildDoubleList(int[] arr) {
if (arr == null) {
return null;
}
DoubleNode head = new DoubleNode(arr[0]);
DoubleNode curDoubleNode = head;
DoubleNode preDoubleNode = null;
for (int i = 1; i < arr.length; i++) {
curDoubleNode.next = new DoubleNode(arr[i]);
curDoubleNode.last = preDoubleNode;
preDoubleNode = curDoubleNode;
curDoubleNode = curDoubleNode.next;
}
curDoubleNode.last = preDoubleNode;
curDoubleNode.next = null;
return head;
}
// 打印单向链表
public static void printList(Node head) {
Node p = head;
while (p.next != null) {
System.out.print(p.value + "-");
p = p.next;
}
System.out.print(p.value);
System.out.println();
}
// 打印双向链表
public static void printList(DoubleNode head) {
DoubleNode p = head;
DoubleNode pre = null;
while (p != null) {
System.out.print(p.value + "-");
pre = p;
p = p.next;
}
while (pre != null) {
System.out.print(pre.value + "-");
pre = pre.last;
}
System.out.println();
}
// 反转单向链表
public static Node reverseList(Node head) {
if (head == null || head.next == null) {
return head;
}
Node nextNode = head.next;
Node curNode = head;
Node preNode = null;
while (true) {
curNode.next = preNode;
if (nextNode == null) {
return curNode;
}
preNode = curNode;
curNode = nextNode;
nextNode = nextNode.next;
}
}
// 反转双向链表
public static DoubleNode reverList(DoubleNode head) {
if (head == null || (head.next == null && head.last == null)) {
return head;
}
DoubleNode curDoubleNode = head;
DoubleNode preDoubleNode = null;
DoubleNode nextDoubleNode = head.next;
while (true) {
curDoubleNode.next = preDoubleNode;
curDoubleNode.last = nextDoubleNode;
if (nextDoubleNode == null) {
return curDoubleNode;
}
preDoubleNode = curDoubleNode;
curDoubleNode = nextDoubleNode;
nextDoubleNode = nextDoubleNode.next;
}
}
}
阿健的刷题库函数|MyList
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 在首次启动项目时,需求常常会要求你在特定的位置添加说明图,以帮助新用户更好使用 App ,这些说明图又叫引导图,本...