链表中间节点(C++)

​
#include <string>
#include <iostream>

using namespace std;



class ListNode {
public:
	int val;
	ListNode* next;

	ListNode(int value) {
		val = value;
		next = nullptr;
	}

};

class Solution {
public:
	ListNode* middleNode(ListNode* head) {
		ListNode* slow = head;
		ListNode* fast = head;

		while (fast != nullptr && fast->next != nullptr) {
			slow = slow->next;
			fast = fast->next->next;
		}
		if (slow != fast && fast != nullptr && fast->next != nullptr) {
			slow = slow->next;
		}
		return slow;
	}

};

int main()
{
	ListNode* head = nullptr;		// 初始化一个空链表  
	ListNode* current = nullptr;	 // 用于追踪链表的当前节点  

	cout << "请输入链表的元素(以0结束):" << endl;


	int value;
	cin >> value;

	while (value != 0)
	{
		ListNode* newNode = new ListNode(value); // 创建新节点  

		if (head == nullptr) {
			head = newNode;				// 第一个节点,设置为头节点  
		}
		else
		{
			current->next = newNode;		// 将新节点链接到当前节点后面  
		}
		current = newNode;				 // 更新当前节点为新节点  
		cin >> value;
	}
	Solution solution;
	ListNode* middle = solution.middleNode(head);

	// 输出中间节点的值  
	if (middle != nullptr) {
		cout << "The middle node is: " << middle->val << endl;
	}
	else {
		cout << "链表为空或节点数为偶数,没有中间节点。" << endl;
	}

	// 释放链表内存,避免内存泄漏  
	current = head;
	while (current != nullptr) {
		ListNode* temp = current;
		current = current->next;
		delete temp;
	}

}



​

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值