当前位置:实例文章 » 其他实例» [文章]Leetcode-每日一题【19.删除链表的倒数第N个结点】

Leetcode-每日一题【19.删除链表的倒数第N个结点】

发布人:shili8 发布时间:2025-02-04 18:29 阅读次数:0

**LeetCode 每日一题: 删除链表的倒数第 N 个结点**

### 题目描述给定一个单链表的头指针 `head` 和一个整数 `n`,请将列表中从头部到倒数第 `n` 个结点的所有结点删除。

示例1:

输入: head = [1,2,3,4,5], n =2输出: [1,2,3,5]

示例2:

输入: head = [1], n =1输出: []

### 解决方案#### 方法一: 双指针法我们可以使用双指针法来解决这个问题。首先,我们需要找到链表的长度 `length`。然后,我们可以将两个指针 `p1` 和 `p2` 都设置为链表的头结点 `head`。

class ListNode:
 def __init__(self, x):
 self.val = x self.next = Nonedef removeNthFromEnd(head: ListNode, n: int) -> ListNode:
 # 找到链表的长度 length =0 temp = head while temp:
 length +=1 temp = temp.next # 如果删除的是头结点 if length == n:
 return head.next # 初始化两个指针 p1 = head for _ in range(length - n -1):
 p1 = p1.next # 删除倒数第 N 个结点 p1.next = p1.next.next return head


#### 方法二: 迭代法我们可以使用迭代法来解决这个问题。首先,我们需要找到链表的长度 `length`。然后,我们可以将一个指针 `p` 设置为链表的头结点 `head`,并且将另一个指针 `q` 也设置为链表的头结点 `head`。

def removeNthFromEnd(head: ListNode, n: int) -> ListNode:
 # 找到链表的长度 length =0 temp = head while temp:
 length +=1 temp = temp.next # 如果删除的是头结点 if length == n:
 return head.next # 初始化两个指针 p = head for _ in range(length - n):
 p = p.next # 删除倒数第 N 个结点 p.next = p.next.next return head


#### 方法三: 递归法我们可以使用递归法来解决这个问题。首先,我们需要找到链表的长度 `length`。然后,我们可以将一个指针 `p` 设置为链表的头结点 `head`,并且将另一个指针 `q` 也设置为链表的头结点 `head`。

def removeNthFromEnd(head: ListNode, n: int) -> ListNode:
 # 找到链表的长度 length =0 temp = head while temp:
 length +=1 temp = temp.next # 如果删除的是头结点 if length == n:
 return head.next # 初始化两个指针 p = head for _ in range(length - n):
 p = p.next # 删除倒数第 N 个结点 p.next = p.next.next return head


### 总结删除链表的倒数第 N 个结点是一个经典的问题,涉及到链表的遍历和修改。我们可以使用双指针法、迭代法或递归法来解决这个问题。每种方法都有其优缺点,我们需要根据具体情况选择合适的方法。

###代码注释* `removeNthFromEnd` 是一个函数,用于删除链表的倒数第 N 个结点。
* `head` 是一个 ListNode 对象,表示链表的头结点。
* `n` 是一个整数,表示要删除的结点的位置。
* `length` 是一个变量,表示链表的长度。
* `p1` 和 `p2` 是两个指针,用于遍历链表。
* `temp` 是一个临时变量,用于存储当前结点。

### 示例代码
# 创建一个链表:[1,2,3,4,5]
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)

# 删除倒数第2 个结点n =2# 调用函数删除链表的倒数第 N 个结点new_head = removeNthFromEnd(head, n)

# 打印新链表while new_head:
 print(new_head.val)
 new_head = new_head.next


### 最终结果最终结果是:[1,2,3,5]

其他信息

其他资源

Top