翻转链表
题意:反转一个单链表。
示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL
解法
这道题目相对简单,只需要定义一个虚拟头节点,就可以解决。
代码
function reverseList(head: ListNode | null): ListNode | null {
let pre = null
let cur = head
while(cur) {
const cache = cur.next
cur.next = pre
pre = cur
cur = cache
}
return pre
};
24. 两两交换链表中的节点
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
解法
这道题和上一道翻转链表有一定区别。解题思路是将一个链表中节点按每两个节点分成一个个区间,分别进行处理。同样需要一个虚拟头节点,用来统一处理逻辑。
代码
function swapPairs(head: ListNode | null): ListNode | null {
let pre = new ListNode(0, head)
let realHead = pre
while(pre.next && pre.next.next) {
const cache = pre.next.next
pre.next.next = pre.next.next.next
cache.next = pre.next
pre.next = cache
pre = cache.next
}
return realHead.next
};