欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

LeetCode:删除链表的倒数第N个节点(c#)

程序员文章站 2024-03-15 18:10:42
...

题目内容

LeetCode:删除链表的倒数第N个节点(c#)

代码实现

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     public int val;
 *     public ListNode next;
 *     public ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ListNode RemoveNthFromEnd(ListNode head, int n) {
        //先跑N个位置的节点
        var fastNode = head;
        //先跑N位置
        for (int i = 0; i < n; i++)
            fastNode = fastNode.next;
        //如果快节点为null,说明删除的就是head节点
        if (fastNode == null)
            return head.next;
        //让快节点再跑一个节点
        fastNode = fastNode.next;
        //慢N+1位置节点,用于删除第N位置节点
        var slowNode = head;
        //循环往下追溯到尾部
        while (fastNode != null)
        {
            fastNode = fastNode.next;
            slowNode = slowNode.next;
        }
        //删除N号节点
        slowNode.next = slowNode.next.next;
        //返回头节点
        return head;
    }
}