找链表中间元素

2022-11-18 16:24:21 浏览数 (1)

代码语言:javascript复制
#include <iostream>
#include <string>
using namespace std;

typedef struct LNode
{ 
	int date;     //节点的数据域 
	struct LNode *next;   //节点的指针域  
}LNode,*LinkList;        // LinkList 为指向结构体LNode的指针类型
 
LinkList findmiddle(LinkList L)
{
	LinkList p ,q;
	p = L;     //p为快指针,初始时指向L
	q = L;     //q为慢指针,初试时指向L
	while(p!=NULL&&p->next != NULL)  //确保p可以走俩步
	{
		p = p->next->next;           //快指针一次走俩步 
		q = q->next;                //慢指针一次走一步 
	}
	return q; 
} 
void CreateList_R(LinkList &L)   //尾插法创建单链表 (尾插法是正序建表) 
{
   	//输入n个元素,建立到头结点的单链表
   	int n ;
   	LinkList  s, r;
   	L = new LNode;
	L->next = NULL;  //先建立一个带头结点的空链表 
	r = L;           //尾指针r指向头结点  (就他自己)
    cout<<"请输入元素个数 n: "<<endl;
	cin>>n;
	cout<<"请依次输入n个元素:"<<endl;
	cout<<"前插法创建单链表..."<<endl;
	while(n--)
	{ 
	 	s = new LNode ;       //生成新结点s
		cin>>s->date;          //输入元素赋值给新结点的数据域
	    s->next = NULL;
	    r->next = s;           //将新结点插s插入尾结点*r之后
		r = s;                 //r指向新的尾结点s 
    }
}
void listprint_L(LinkList L)  //单链表的输出 
{
	LinkList p;
	p = L->next;
	while(p)
	{
	 	cout<<p->date<<"t";
	 	p = p->next;
	} 
	cout<<endl;
}
int main()
{
	LinkList L,mid;
	CreateList_R(L);
	mid = findmiddle(L);
	cout<<mid->date<<endl;
	
}

0 人点赞