代码随想录Day04(率土红颜出王异了吼吼吼)

01.反转链表

反转链表-leetcode

思路:使用快慢指针的思想,设置一前一后两个节点,循环反转

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.两两交换链表节点

两两交换链表节点-leetcode

思路:设置虚拟头节点,然后就是不断交换相邻的两个元素

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个结点

思路:使用快慢结点的思路,先让快指针走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
};

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值