1.反转一个单链表
https://leetcode-cn.com/problems/reverse-linked-list/description/
public ListNode reverseList(ListNode head) {
if (head == null) {
return null;
}
ListNode prev = null;
ListNode cur = head;
while (cur != null) {
ListNode curNext = cur.next;
cur.next = prev;
prev = cur;
cur = curNext;
}
return prev;
}
2. 链表的中心结点
https://leetcode-cn.com/problems/middle-of-the-linked-list/description/
public ListNode middleNode(ListNode head) {
if (head == null) {
return null;
}
if (head.next == null) {
return head;
}
ListNode fast = head;
ListNode slow = head;
while (fast != null && fast.next != null) {
fast = fast.next.next;
slow = slow.next;
}
return slow;
}
3 链表中倒数第k个结点
https://www.nowcoder.com/practice/529d3ae5a407492994ad2a246518148a?tpId=13&&tqId=11167&rp=2&ru=/activity/oj&qru=/ta/coding-interviews/question-ranking
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
//k是否是合法的
if(k <= 0 || head == null) {
return null;
}
ListNode fast = head;
ListNode slow = head;
for (int i = 0; i < k; i++) {
if (fast ==null) {
return null;
}
fast = fast.next;
}
while (fast != null) {
fast = fast.next;
slow = slow.next;
}
return slow;
}
}
4 合并两个有序链表
https://leetcode-cn.com/problems/merge-two-sorted-lists/
class Solution {
public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
ListNode newNode = new ListNode(0);//虚拟节点,数据不具备意义。
ListNode tmp = newNode;
while (list1 != null && list2 != null) {
if (list1.val < list2.val) {
tmp.next = list1;
tmp = tmp.next;
list1 = list1.next;
}else {
tmp.next = list2;
tmp = tmp.next;
list2 = list2.next;
}
}
if(list1 == null && list2 != null) {
tmp.next = list2;
} else {
tmp.next = list1;
}
return newNode.next;
}
}
5 链表分割
https://www.nowcoder.com/practice/0e27e0b064de4eacac178676ef9c9d70?tpId=8&&tqId=11004&rp=2&ru=/activity/oj&qru=/ta/cracking-the-coding-interview/question-ranking
public class Partition {
public ListNode partition(ListNode pHead, int x) {
// write code here
if (pHead == null) {
return null;
}
ListNode bs = null;
ListNode be = null;
ListNode as = null;
ListNode ae = null;
ListNode cur = pHead;
while (cur != null) {
if (cur.val < x) {
if (bs == null) {
bs = cur;
be = cur;
} else {
be.next = cur;
be = be.next;
}
} else {
if (as == null) {
as = cur;
ae = cur;
} else {
ae.next = cur;
ae = ae.next;
}
}
cur = cur.next;
}
if (bs == null) {
return as;
}
be.next = as;
if (as != null) {
ae.next = null;
}
return bs;
}
}