力扣19 删除链表的第N个结点
发布人:shili8
发布时间:2025-02-12 00:56
阅读次数:0
**力扣19: 删除链表的第 N 个结点**
删除链表的第 N 个结点是一个经典的问题,涉及到链表的操作和算法设计。这个问题要求我们在给定的链表中找到并删除第 N 个结点。
### 题目描述给定一个单向链表的头结点 `head` 和一个整数 `n`,请你删除链表中第 `n` 个结点,并返回修改后的链表。
**示例1:**
输入:`head = [1,2,3,4,5], n =2`
输出:`[1,2,3,5]`
**示例2:**
输入:`head = [1], n =1`
输出:`[]`
### 解决方案我们可以使用以下步骤来解决这个问题:
1. 首先,我们需要找到链表的长度,用于确定第 N 个结点的位置。
2. 然后,我们需要找到第 N-1 个结点,因为我们要删除第 N 个结点,所以我们需要找到它的前一个结点。
3. 最后,我们可以将第 N 个结点的值设置为 null,从而实现链表中该结点的删除。
###代码示例
# Definition for singly-linked list. class ListNode: def __init__(self, x): self.val = x self.next = Noneclass Solution: def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode: # Step1: 找到链表的长度 length =0 temp = head while temp: length +=1 temp = temp.next # Step2: 找到第 N-1 个结点 if n == length: return head.next else: temp = head for _ in range(length - n -1): temp = temp.next # Step3: 删除第 N 个结点 temp.next = temp.next.next return head
###代码注释* `ListNode` 类定义了一个链表结点的结构,包含一个整数值和一个指向下一个结点的指针。
* `Solution` 类定义了一个解决方案函数 `removeNthFromEnd`,用于删除链表中第 N 个结点。
* 在 `removeNthFromEnd` 函数中,我们首先找到链表的长度,然后找到第 N-1 个结点。最后,我们将第 N 个结点的值设置为 null,从而实现链表中该结点的删除。
### 测试用例
# Test case1: head = ListNode(1) head.next = ListNode(2) head.next.next = ListNode(3) head.next.next.next = ListNode(4) head.next.next.next.next = ListNode(5) solution = Solution() result = solution.removeNthFromEnd(head,2) print(result.val) # Output:1print(result.next.val) # Output:2print(result.next.next.val) # Output:3print(result.next.next.next.val) # Output:5# Test case2: head = ListNode(1) solution = Solution() result = solution.removeNthFromEnd(head,1) assert result is None
### 总结删除链表的第 N 个结点是一个经典的问题,涉及到链表的操作和算法设计。我们可以使用以下步骤来解决这个问题:找到链表的长度、找到第 N-1 个结点、将第 N 个结点的值设置为 null,从而实现链表中该结点的删除。