1、非递归创建单链表
public static LinkedNode createLinked(List list) {
LinkedNode head = null;
LinkedNode temp = null;
for (int i = 0; i < list.size(); i++) {
LinkedNode linkedNode = new LinkedNode(list.get(i));
if (temp != null) {
temp.next = linkedNode;
} else {
head = linkedNode;
}
temp = linkedNode;
}
return head;
}
2、递归创建单链表
public static LinkedNode createRecursionLinked(List list) {
if (CollectionUtils.isEmpty(list)) {
return null;
}
LinkedNode newNode = new LinkedNode(list.get(0));
newNode.next = createRecursionLinked(list.subList(1, list.size()));
return newNode;
}
3、添加一个节点
public static LinkedNode addNode(LinkedNode head, int value) {
if (head == null) {
head = new LinkedNode(value);
return head;
}
LinkedNode temp = head;
while (temp != null) {
temp = temp.next;
}
temp.next = new LinkedNode(value);
return head;
}
4、添加一个节点
public static LinkedNode addNode(LinkedNode head, int value) {
if (head == null) {
head = new LinkedNode(value);
return head;
}
LinkedNode temp = head;
while (temp != null) {
temp = temp.next;
}
temp.next = new LinkedNode(value);
return head;
}
5、删除一个节点
public static void deleteNode(LinkedNode head, int index) {
int length = linkedLength(head);
if (length < index) {
System.out.println("删除失败");
return;
}
LinkedNode temp = head;
for (int i = 0; i < index - 1; i++) {
temp = temp.next;
}
if (temp.next.next == null) {
// last node
temp.next = null;
} else {
temp.next = temp.next.next;
}
}
6、修改一个节点
public static void updateNode(LinkedNode head, int index, int changeValue) {
int length = linkedLength(head);
if (length < index) {
System.out.println("删除失败");
return;
}
LinkedNode temp = head;
for (int i = 0; i < index; i++) {
temp = temp.next;
}
temp.val = changeValue;
}
7、计算链表的长度
public static int linkedLength(LinkedNode head) {
LinkedNode temp = head;
int length = 0;
while (temp != null) {
temp = temp.next;
length++;
}
return length;
}
8、计算链表的长度
public static void printLinked(LinkedNode head) {
LinkedNode temp = head;
while (temp != null) {
System.out.print(temp.val + " ");
temp = temp.next;
}
}
9、计算链表的长度
public static void printLinked(LinkedNode head) {
LinkedNode temp = head;
while (temp != null) {
System.out.print(temp.val + " ");
temp = temp.next;
}
}
10、反向打印单链表
public static LinkedNode printRevertLinked(LinkedNode head) {
if (head == null) {
return head;
}
if (head.next == null) {
System.out.println(head.val);
return head;
}
LinkedNode revertLinked = printRevertLinked(head.next);
System.out.println(head.val);
return revertLinked;
}
11、合并两个有序的单链表
public static LinkedNode MergeLinked(LinkedNode first, LinkedNode second) {
LinkedNode tempHead = new LinkedNode(0);
LinkedNode pre = first;
LinkedNode next = first.next;
LinkedNode secondTemp = second;
while (next != null) {
if (pre.val <= secondTemp.val && next.val >= secondTemp.val) {
LinkedNode linkedNode = new LinkedNode(secondTemp.val);
pre.next = linkedNode;
linkedNode.next = next;
pre = linkedNode;
secondTemp = secondTemp.next;
} else if (pre.val < secondTemp.val && next.val < secondTemp.val) {
if (next.next == null) {
next.next = secondTemp;
break;
}
next = next.next;
pre = pre.next;
} else if (pre.val > secondTemp.val && secondTemp != null) {
if (secondTemp.next == null) {
secondTemp.next = pre;
tempHead.next = second;
break;
} else if (pre.val <= secondTemp.next.val){
LinkedNode linkedNode = secondTemp.next;
secondTemp.next = pre;
tempHead.next = second;
secondTemp = linkedNode;
} else {
secondTemp = secondTemp.next;
}
}
}
return tempHead.next;
}
12、打印节点
public static void printLinked(LinkedNode head) {
LinkedNode temp = head;
while (temp != null) {
System.out.print(temp.val + " ");
temp = temp.next;
}
}
13、反转单链表
public static LinkedNode revertLinked(LinkedNode head) {
if (head == null || head.next == null) {
return head;
}
LinkedNode linkedNode = revertLinked(head.next);
head.next.next = head;
head.next = null;
return linkedNode;
}
版权声明:本文为ByteBlogs博主「啦啦123」的原创文章。
原文链接:https://www.byteblogs.com/article/147