1007. Find the middle element in a Linked List

来源:互联网 发布:mobi漫画制作软件 编辑:程序博客网 时间:2024/05/17 23:05
Description

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;}


0 0