跳到主要内容

链表

链表反转

力扣原题

https://leetcode.com/problems/reverse-linked-list

代码实现

public ListNode reverseList(ListNode head) {

ListNode pre = null;
ListNode next = null;

while (head != null) {
next = head.next;
head.next = pre;
pre = head;
head = next;
}

return pre;
}

合并两个有序链表

力扣原题

https://leetcode.com/problems/merge-two-sorted-lists

代码实现

public ListNode mergeTwoLists(ListNode list1, ListNode list2) {

if(list1 == null) return list2;
if(list2 == null) return list1;

ListNode head = null;
ListNode v1 = list1;
ListNode v2 = list2;
if (list1.val < list2.val) {
head = list1;
v1 = list1.next;
} else {
head = list2;
v2 = list2.next;
}

ListNode pre = head;
while (v1 != null && v2 != null) {
if (v1.val < v2.val) {
pre.next = v1;
v1 = v1.next;
} else {
pre.next = v2;
v2 = v2.next;
}
pre = pre.next;
}
if (v1 != null) {
pre.next = v1;
} else {
pre.next = v2;
}

return head;

}

两个链表相加

力扣原题

https://leetcode.cn/problems/add-two-numbers

代码

public ListNode addTwoNumbers(ListNode l1, ListNode l2) {

if (l1 == null) {
return l2;
}
if (l2 == null) {
return l1;
}

ListNode firstNode = null;
ListNode current = null;

int one = 0;
for (int temp = 0, sum = 0; l1 != null || l2 != null; l1 = l1 == null ? null : l1.next, l2 = l2 == null ? null : l2.next) {
temp = (l1 == null ? 0 : l1.val) + (l2 == null ? 0 : l2.val) + one;
one = temp / 10;
sum = temp % 10;
if (firstNode == null) {
firstNode = new ListNode(sum);
current = firstNode;
} else {
current.next = new ListNode(sum);
current = current.next;
}
}

if (one > 0) {
current.next = new ListNode(one);
}


return firstNode;
}

划分链表

力扣原题

https://leetcode.cn/problems/partition-list/description/

代码