给定一个单链表l,请编写程序输出l中间节点保存的数据
时间: 2023-05-08 19:01:12 浏览: 129
一个用vc++编写的关于单链表的程序
5星 · 资源好评率100%
首先,需要遍历整个单链表,统计出单链表的长度。然后找到单链表的中间节点位置,如果单链表长度为偶数,则中间节点有两个,输出其中较大的一个即可。
找到中间节点位置的方法有多种,可以使用快慢指针,快指针每次移动两个节点,慢指针每次移动一个节点,当快指针到达链表末尾时,慢指针指向的就是中间节点。
另外,如果单链表长度较小,可以直接使用数组将所有节点存储下来,然后输出中间节点即可。
具体代码实现如下:
```
# 定义单链表节点类
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def find_mid_node(head: ListNode) -> int:
# 先遍历整个单链表,统计长度
length = 0
curr = head
while curr:
length += 1
curr = curr.next
mid = length // 2 # 计算中间节点位置
# 使用快慢指针找中间节点
slow, fast = head, head
for i in range(mid):
fast = fast.next
while fast.next:
slow = slow.next
fast = fast.next
if length % 2 == 0:
return max(slow.val, slow.next.val)
else:
return slow.val
```
此外,还需要注意单链表为空或只有一个节点的情况,这时中间节点就是链表的唯一节点。
阅读全文