.(等分链表)

来源:百度文库 编辑:神马文学网 时间:2024/04/28 04:23:04

2.(等分链表)假设单链表的节点类型为

struct Node{ double value_; Node* next_; };

单链表的最后一个节点的next_域为0。完成下面函数,它返回单链表的中间节点。

Node* middle(Node* first);

期中形参first指向单链表的第一个节点。如果单链表的结点个数为偶数,则返回任意一个中间节点均可。

/****************************************************************************/

/*==================================================================*/

/*****************************************************************************/

#include

using namespace std;

 

#define SIZE 9                              //链表的长度;  

 

struct Node{

       double value_;

       Node* next_;

};

 

 

Node* middle(Node* first)                    //题目要求设计的函数;

{

       int n=0,mid;

       Node* currentPtr;

       currentPtr=first;

       while(currentPtr!=NULL){                 //统计链表长度;

              n++;

              currentPtr=currentPtr->next_;

       }

       if(n%2==1) { n++; }                     

       mid=n/2;

       currentPtr=first;

       for(int i=1;i

              currentPtr=currentPtr->next_;

       }

       return currentPtr;

}

 

 

int main()

{

       Node head,a[SIZE],*currentPtr;             //开始创建链表;

    a[0].value_=0;

       a[0].next_=NULL;

       for(int i=1;i

              a[i].value_=i;

              a[i-1].next_=&(a[i]);

       }

       a[i-1].next_=NULL;

       head=a[0];                                 //完成创建链表;

 

       cout<<"默认链表为:"<

       currentPtr=&head;                         

       while(currentPtr->next_!=NULL){

              cout<value_<<"->";

              currentPtr=currentPtr->next_;

       }

       cout<value_<

 

       currentPtr=middle(&head);                  //题中函数的运用;

       cout<value_<

       return 0;

}

/****************************************************************************/

/*==================================================================*/

/****************************************************************************/