欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。

程序员文章站 2022-07-10 20:15:24
...
#include <stdio.h>
#include <stdlib.h>
#include<assert.h>
typedef int sdatatype;
typedef struct slistnode//单链表节点
{
	sdatatype _data;
	struct slistnode *pnext;
}node, *pnode;
typedef struct slist//给一个头指针保存第一个节点的地址
{
	pnode _phead;
}slist, *pslist;
pnode middlelist(slist *s) {
	//初值设为1和0,刚好返回要求的结点,不用分类判断
	int count1 = 1;//计数所有结点数
	int count = 0;//用来比较是否到达中间结点
	pnode p1 = s->_phead;
	pnode p2 = s->_phead;
	while (p1->pnext != NULL) {
		p1 = p1->pnext;
		count1++;
	}
		count1 = count1 / 2;
		while (count != count1) {
			p2 = p2->pnext;
			count++;
		}
		return p2;

	
}

 

推荐阅读