删除链表中最小元素的代码
时间: 2024-09-14 21:14:24 浏览: 38
c代码-二叉搜索树的删除操作
在处理链表删除最小元素的问题时,我们需要遍历整个链表来找到最小元素,并记录下最小元素的前一个节点,以便于删除操作。以下是使用Python语言实现的代码示例:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def deleteNodeWithMin(head):
if not head or not head.next:
return head
# 初始化两个节点,minPrev为最小元素前一个节点,prev为当前节点
minPrev = None
prev = head
curr = head.next
# 初始化最小元素值为当前节点的值
minVal = head.val
# 遍历链表
while curr:
# 如果当前节点的值小于最小值
if curr.val < minVal:
# 更新最小值和最小元素前一个节点
minVal = curr.val
minPrev = prev
# 移动prev和curr节点
prev = curr
curr = curr.next
# 如果最小元素是头节点
if minVal == head.val:
return head.next
else:
# 删除最小元素
minPrev.next = minPrev.next.next
return head
# 示例使用
# 创建链表 4 -> 2 -> 1 -> 3
head = ListNode(4, ListNode(2, ListNode(1, ListNode(3))))
# 删除最小元素
new_head = deleteNodeWithMin(head)
# 打印结果链表
curr = new_head
while curr:
print(curr.val, end=" ")
curr = curr.next
```
这段代码首先定义了一个链表节点`ListNode`类,然后定义了一个删除链表中最小元素的函数`deleteNodeWithMin`。在这个函数中,我们维护了两个指针:`prev`和`curr`,分别代表当前遍历到的节点和当前节点的下一个节点。同时,我们使用`minPrev`记录下最小元素前一个节点的位置,以便删除操作。
遍历结束后,我们需要根据`minPrev`来判断最小元素是否是头节点。如果是,直接返回`head.next`;如果不是,则通过`minPrev.next = minPrev.next.next`来删除最小元素。
阅读全文