Assuming the following definition:
template <typename Node_entry>struct Node {
Node_entry entry;
Node *next;
Node();
Node(Node_entry item, Node *add_on = NULL);
};
template <typename Node_entry> Node<Node_entry>::Node()
{
next = NULL;
}
template <typename Node_entry> Node<Node_entry>::Node(Node_entry item, Node *add_on)
{
entry = item;
next = add_on;
}
Implement the following function:
template<typename T> const Node<T>* medianElement( const Node<T> * head )
//Precondition: the linked list head is not empty.(但是需要判断为头空时的情况!)
//Postcondition: it returns the pointer to the middle element in the linked list head.
//If there are even number of elements in the list, the first one of the two middle elements is returned.
For example,
#include <iostream>
using namespace std;
template <typename Node_entry>struct Node {
Node_entry entry;
Node *next;
Node();
Node(Node_entry item, Node *add_on = NULL);
};
template <typename Node_entry> Node<Node_entry>::Node()
{
next = NULL;
}
template <typename Node_entry> Node<Node_entry>::Node(Node_entry item, Node *add_on)
{
entry = item;
next = add_on;
}
template<typename T> const Node<T>* medianElement( const Node<T> * head ) {
int count = 0;
if (head == NULL) {
return head;
}
const Node<T>* temp = new Node<T>();
temp = head;
//计算链表的长度
while (temp != NULL) {
count++;
temp = temp->next;
}
//计算出中位数
int half = 1;
if (count % 2 == 0) {
half = count / 2;
}
else half = count / 2 + 1;
//获得元素
while (half != 1) {
head = head->next;
half--;
}
return head;
}