c语言快慢指针之找未知长度单链表中间结点 的值并显示
2017-02-12 16:23
656 查看
#include <stdio.h>
#include<malloc.h>
#include<time.h>
#define Max 5
typedef struct cursor
{
int data;
struct cursor *next;
}cursor;
cursor *initList();
void findList(cursor head);
void showList(cursor head);
void showList(cursor head)
{
cursor *p;
p=head.next;
while(p!=NULL)
{
printf("%5d",p->data);
p=p->next;
}
printf("\n");
}
void findList(cursor head)
{
cursor *mid;
cursor *fast;
cursor *p;
fast=head.next;
mid=head.next;
while(fast->next!=NULL)
{
if(fast->next->next!=NULL)
{
fast=fast->next->next;
mid=mid->next;
}
else
{
fast=fast->next;
}
}
printf("%d",mid->data);
}
cursor *initList()
{
cursor *head=NULL;
cursor *p=NULL,*q=NULL;
int k=0;
head=(cursor *)(malloc(sizeof(cursor)));
while(k<Max)
{
q=(cursor *)(malloc(sizeof(cursor)));
k++;
if(k==1)
{
head->next=q;
}
else
{
p->next=q;
}
p=q;
p->data=rand()%100+1;
}
p->next=NULL;
return head;
}
int main()
{
cursor *head=NULL;
srand(time(NULL));
head=initList();
showList(*head);
findList(*head);
}
#include<malloc.h>
#include<time.h>
#define Max 5
typedef struct cursor
{
int data;
struct cursor *next;
}cursor;
cursor *initList();
void findList(cursor head);
void showList(cursor head);
void showList(cursor head)
{
cursor *p;
p=head.next;
while(p!=NULL)
{
printf("%5d",p->data);
p=p->next;
}
printf("\n");
}
void findList(cursor head)
{
cursor *mid;
cursor *fast;
cursor *p;
fast=head.next;
mid=head.next;
while(fast->next!=NULL)
{
if(fast->next->next!=NULL)
{
fast=fast->next->next;
mid=mid->next;
}
else
{
fast=fast->next;
}
}
printf("%d",mid->data);
}
cursor *initList()
{
cursor *head=NULL;
cursor *p=NULL,*q=NULL;
int k=0;
head=(cursor *)(malloc(sizeof(cursor)));
while(k<Max)
{
q=(cursor *)(malloc(sizeof(cursor)));
k++;
if(k==1)
{
head->next=q;
}
else
{
p->next=q;
}
p=q;
p->data=rand()%100+1;
}
p->next=NULL;
return head;
}
int main()
{
cursor *head=NULL;
srand(time(NULL));
head=initList();
showList(*head);
findList(*head);
}
相关文章推荐
- 求未知长度链表的中间结点---快慢指针
- 【java数据结构与算法学习】快慢指针---快速找到未知长度单链表的中间节点
- 快速查找长度未知的单链表的中间结点
- 数据结构之快慢指针查找链表中间结点
- 给定一个单向链表(长度未知),请遍历一次就找到中间的指针,假设该链表存储在只读存储器,不能被修改
- 【链表】C++快慢两个指针解决问题(分别求倒数第k个、中间以及环的入口结点)
- 快慢指针原理--快速找到未知长度单链表的中间节点
- 链表使用快慢指针求中间值
- 利用快慢指针快速得到链表中间节点
- 给定链表中间某结点指针,删除链表中该结点
- [求助]C语言单链表头指针 头结点 首元节点关系
- 假设在长度大于1的循环链表中,即无头结点也无头指针,s为指向链表中的某个结点的指针,试编写算法删除结点s的前驱结点
- Java实现查找链表的中间节点,(在未知链表长度的情况下)
- 单链表长度未知,快速找到其中间节点----不错的解决方案
- (学习java)写一个完整的程序,实现随机生成20个元素的链表,快速查找中间结点的值并显示
- 给定链表中间某结点指针,删除链表中该结点
- 快速找出长度未知链表的中间节点(快慢指针)
- C语言——链表部分(包括节点的建立、总长度、显示链表、插入节点以及删除节点)
- 一个有头尾的单链表,长度未知,如何快速的找出位于中间的那个元素?
- C语言--单链表创建、求长度、查找前驱结点、删除结点