华为od寻找链表的中间节点
时间: 2023-09-20 14:02:07 浏览: 103
查找单链表的中间节点
5星 · 资源好评率100%
华为OD找到链表的中间节点的基本思路是使用快慢指针的方法。
首先,定义两个指针,一个慢指针slow,一个快指针fast,初始时两个指针同时指向链表的头节点。
然后,每次快指针移动两步,慢指针移动一步,直到快指针到达链表的末尾或者下一个节点为空。
最后,当快指针到达链表末尾时,慢指针指向的节点就是链表的中间节点。
这种方法的原理是快指针每次移动的步数是慢指针的两倍,当快指针到达链表末尾时,慢指针刚好移动到链表的中间位置。
如果链表的长度为奇数,那么中间节点就是慢指针指向的节点;如果链表的长度为偶数,那么中间节点就是慢指针指向的节点以及其后面一个节点。
以下是一个示例代码实现:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def find_middle_node(head):
slow = head
fast = head
while fast and fast.next:
slow = slow.next
fast = fast.next.next
return slow
# 测试示例
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)
middle_node = find_middle_node(head)
print(middle_node.val) # 输出3
```
在上述示例代码中,通过快慢指针找到了链表的中间节点,该节点的值为3。
阅读全文