01.反转链表
思路:使用快慢指针的思想,设置一前一后两个节点,循环反转
function reverseList(head: ListNode | null): ListNode | null {
let cur:ListNode = head
let prev:ListNode | null= null
let tmp:ListNode | null = null
while (cur) {
tmp = cur.next
cur.next = prev
prev = cur
cur = tmp
}
return prev
};
02.两两交换链表节点
思路:设置虚拟头节点,然后就是不断交换相邻的两个元素
function swapPairs(head: ListNode | null): ListNode | null {
let dummyNode:ListNode = new ListNode(0, head)
let cur:ListNode = dummyNode
while (cur.next !== null && cur.next.next !== null) {
let first:ListNode = cur.next
let second:ListNode = cur.next.next
cur.next = second
first.next = second.next
second.next = first
cur = first
}
return dummyNode.next
};
03.删除链表的倒数第N个结点
思路:使用快慢结点的思路,先让快指针走n步,然后以快指针为结束条件,通过slow节点删除目标结点
function removeNthFromEnd(head: ListNode | null, n: number): ListNode | null {
const dummyNode:ListNode = new ListNode(0, head);
let fast:ListNode = dummyNode
let slow:ListNode = dummyNode
while (n--) {
fast = fast.next
}
while (fast.next != null) {
fast = fast.next
slow = slow.next
}
slow.next = slow.next.next
return dummyNode.next
};