删除链表第k个结点

本文详细探讨了如何在单链表中删除第k个节点的算法,从理解问题到逐步解析解决方案,包括如何找到目标节点以及在不同情况下如何正确删除节点。此外,还提供了具体的代码示例进行解释。
// 删除链表第k个结点,输出剩余序列
#include<iostream>
#include<string>
#include<vector>

using namespace std;
struct Node {
   
   
	int v;
	Node* next;
	Node
链表是一种线性数据结构,每个节点包含两个部分:数据域和指针域,其中指针域指向下一个节点。以下是单链表的一些基本操作: 1. **链表创建** (尾插法): ```python class Node: def __init__(self, data=None): self.data = data self.next = None def append(head, data): if not head: head = Node(data) else: current = head while current.next: current = current.next current.next = Node(data) return head ``` (头插法) 可以类似地实现,但在头部插入节点: ```python def prepend(head, data): new_node = Node(data) new_node.next = head return new_node ``` 2. **输出链表**: ```python def print_list(head): current = head while current: print(current.data, end=" -> ") current = current.next print("None") ``` 3. **查找第k个节点**: ```python def find_kth_node(head, k): count = 0 current = head while current and count < k: count += 1 current = current.next if count == k: return current else: return None ``` 4. **在第k个节点后插入新节点**: ```python def insert_after_kth(head, k, data): if not head or k <= 0: return None node_to_insert = find_kth_node(head, k) if not node_to_insert: return None new_node = Node(data) new_node.next = node_to_insert.next node_to_insert.next = new_node return head ``` 5. **在第k个节点前插入新节点**: ```python def insert_before_kth(head, k, data): if not head or k <= 0: return None if k == 1: return prepend(head, data) previous_node = find_kth_node(head, k - 1) if previous_node: new_node = Node(data) new_node.next = previous_node.next previous_node.next = new_node return head ``` 6. **删除第k个节点**: ```python def delete_kth_node(head, k): if not head or k <= 0: return head if k == 1: return head.next current = head for _ in range(k - 1): current = current.next if current is None or current.next is None: return head current.next = current.next.next return head ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值