单链表中求中间节点

来源:互联网 发布:程序员 工资 编辑:程序博客网 时间:2024/05/01 08:57

问题描述

求单链表中间节点的值,如果中间有2个,只要第一个,就是偶数情况下,只要中间的第一个。速度要快!
这里写图片描述

解决方法

可以参照这篇博文:http://blog.csdn.net/dawn_after_dark/article/details/73611115
这篇博文所说的第一种方法这里就不阐述了。着重说一下第二种。
这里还是用小明和小王跑步的例子,小明与小王一起跑步,小王的速度是小明的2倍,当小王跑到终点的时候,小明正好处于正中间。所以我们这里还是用2个指针,一个指向第一个节点以1步向前走,另一个指向第二个节点以2步向前走。
Linklist完整定义参考博文:http://blog.csdn.net/dawn_after_dark/article/details/73610674
类中添加函数声明:

Node* findHalfNode();

函数实现:

Node* LinkList::findHalfNode() {    if (head->next == NULL) {        cout << "该链表没有节点,无法找到中间节点!" << endl;        return NULL;    }    Node* first = head->next->next;    Node* second = head->next;    while (first&&first->next) {        first = first->next->next;        second = second->next;    }    return second;}

如果采用两个指针刚开始是同时指向第一个节点的话,代码简单修改为如下:

Node* LinkList::findHalfNode() {    if (head->next == NULL) {        cout << "该链表没有节点,无法找到中间节点!" << endl;        return NULL;    }    Node* first = head->next;    Node* second = head->next;    while (first&&first->next&&first->next->next) {        first = first->next->next;        second = second->next;    }    return second;}
原创粉丝点击