当前位置:实例文章 » JAVA Web实例» [文章]力扣19 删除链表的第N个结点

力扣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,从而实现链表中该结点的删除。

其他信息

其他资源

Top