删除单链表的第i个结点
时间: 2023-12-18 12:03:43 浏览: 55
要删除单链表的第i个结点,需要先找到该结点的前驱结点,然后将前驱结点的next指针指向待删除结点的下一个结点,最后释放待删除结点的空间。
具体实现可以按照以下步骤:
1. 判断链表是否为空,如果为空则无法进行删除操作,直接返回。
2. 如果要删除的是第一个结点,则将头结点指向第二个结点,并释放原来的头结点空间。
3. 如果要删除的不是第一个结点,则需要先找到前驱结点。
4. 从头结点开始遍历链表,记录当前结点和前驱结点。
5. 如果当前结点的位置等于要删除的位置i,则将前驱结点的next指针指向当前结点的下一个结点,并释放当前结点的空间。
6. 如果遍历完整个链表仍未找到要删除的结点,则说明要删除的位置i无效,直接返回。
以下是Python代码实现:
```
def delete_node(head, i):
if not head: # 链表为空
return None
if i == 1: # 删除第一个结点
temp = head
head = head.next
del temp
return head
curr = head
prev = None
pos = 1
while curr:
if pos == i: # 找到了要删除的结点
prev.next = curr.next
del curr
return head
else:
prev = curr
curr = curr.next
pos += 1
# 到达链表末尾仍未找到要删除的结点
print("Invalid position!")
return head
```
需要注意的是,上述代码中只是简单地删除了指定位置的结点,没有进行其它操作,如释放结点中的数据等。如果需要释放结点中的数据,可以在删除结点之前先进行相应的操作,然后再进行删除。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![cpp](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)