python扫描实现删除链表的倒数第n个节点 代码实现
时间: 2023-12-13 17:04:21 浏览: 126
好的,以下是 Python 删除链表倒数第 n 个节点的代码实现:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def removeNthFromEnd(head: ListNode, n: int) -> ListNode:
dummy = ListNode(0)
dummy.next = head
length = 0
first = head
while first:
length += 1
first = first.next
length -= n
first = dummy
while length > 0:
length -= 1
first = first.next
first.next = first.next.next
return dummy.next
```
希望以上代码能够帮到您,如果您还有其它问题,请随时向我提问。现在,您想听个笑话吗?有一只狮子,来到镜子前,镜子里的狮子说:“你一定很强壮,很勇敢。”这只狮子很高兴,于是他问道:“那么,你是不是真的存在?”镜子里的狮子笑着回答:“我比你更真实!”
相关问题
删除链表倒数第n个节点 力扣 包括输入和输出
删除链表倒数第 n 个节点是一个常见的链表操作题目,在数据结构中尤其实用。给定一个单向链表和一个整数 n,你需要从链表的末尾开始往前数,找到第 n 个节点,并将其从链表中移除。链表的输入通常是一个指向头节点的指针,而输出则是更新后的链表。
**步骤描述:**
1. 初始化两个指针,`p` 和 `q`,分别表示当前节点和前一个节点。初始时,`p` 指向头节点,`q` 点向 null。
2. 当 `p` 遍历到链表的第 n 个节点时,即 `p` 走了 n 步,`q` 则走了 n-1 步。此时,`q` 就是指向倒数第 n 个节点的前一个节点。
3. 如果 `p` 或者 `q` 未到达链表尾部,则将 `q` 的 next 指针指向 `p` 的下一个节点,实现了对倒数第 n 个节点的删除。
4. 返回头节点作为结果链表。
**Python 示例:**
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def removeNthFromEnd(head: ListNode, n: int) -> ListNode:
p = head
q = None
# 先让p向前走n步
for _ in range(n):
if not p:
return head # 如果n大于链表长度,则直接返回头节点
p = p.next
# 保持p在n位置,然后同时移动p和q直到p到达尾部
while p.next:
p = p.next
q = q.next
# 删除倒数第n个节点
if q:
q.next = q.next.next
return head
```
给你一个链表,删除链表的倒数第n个节点并返回链表的头节点
在链表中删除倒数第n个节点是一个常见的算法问题,通常需要使用两个指针技巧解决。以下是步骤概述:
1. **初始化两个指针**:
- `p` 初始化为链表头节点。
- `q` 初始化为`None`,后续会用于存储倒数第n-1个节点。
2. **遍历链表找到倒数第n-1个节点**:
- 当`q`不为空且`p`已经走了n-1步时,`q`指向的就是倒数第n-1个节点。
- 否则,`p`向前移动一步,`q`也向前移动一步,直到满足条件。
3. **删除倒数第n个节点**:
- 如果找到了这个节点,即`q`不为空,将`q`的下一个节点替换为`q`的下一个节点的下一个节点,使得`q`被“跳过”。
4. **返回新的头节点**:
- 如果`p`就是原头节点并且删除了倒数第n个节点,那么`p`就是新头节点;如果`p`还没有到达倒数第n个节点,则继续让`p`前进,并返回`p`作为新头节点。
这是一个迭代的过程,不需要预先预估链表的长度。以下是Python的一个简要实现示例:
```python
def removeNthFromEnd(head, n):
p = head
q = None
# 找到倒数第n-1个节点
for _ in range(n):
if p is None:
return head
p = p.next
while p is not None:
p = p.next
q = q.next
# 删除倒数第n个节点
if q:
q.next = q.next.next
return head
```
阅读全文