zoukankan      html  css  js  c++  java
  • 未知链表的求中间位置

    直接上代码:

    /*
    
    设置两个指针*one、*two都指向单链表的头节点。其中* two的移动速度是*one的2倍。当* two指向末尾节点的时候,*one正好就在中间了。
    
    */
    
    #include <stdio.h>
    #include <stdlib.h>
    
    #define LEN sizeof(struct node)
    
    struct node
    {
    	int date;
    	struct node *next;
    };
    
    struct node *CreateList();
    void TraverseList(struct node * head);
    struct node *findmid(struct node *head);
    struct node *findmid(struct node *head);
    
    //
    struct node *CreateList()
    {
    	struct node * head;//头结点
    	struct node * pcurrent;//保存新创建结点的地址
    	struct node * tail;//保存原链表最后一个接结点的地址
    	int num=0;
    	//int n=0;
    
    	head=tail=NULL; /*开始 head and tail指向 NULL*/ 
    
    	scanf("%d",&num);
    	while(num!=0)/*只要学号不为 0,就继续录入下一个节点*/
    	{
    		pcurrent=(struct node *)malloc(LEN);
    		pcurrent->date=num;
    		pcurrent->next=NULL;
    		if(head==NULL)
    			head=pcurrent;
    		else
    			tail->next=pcurrent;
    		//尾指针指向新的表尾
    		tail=pcurrent;
    		scanf("%d",&num);
    	}
    	//返回头指针 
    	return head;
    }
    
    void TraverseList(struct node * head)
    {
    	struct node * ptr;
    	if(head==NULL)
    	{
    		printf("No Records");
    		exit(0);
    	}
    	else
    	{
    		for(ptr=head; ptr; ptr=ptr->next)
    			printf("%d\n",ptr->date);
    	}
    }
    
    struct node *findmid(struct node *head)
    {
    	struct node *one = head, *two = head;
    	while(two != NULL)
    	{
    		two = two->next;
    		if(two != NULL)
    		{
    			two = two->next;
    			one = one->next;
    		}
    	}
    	return one;
    }
    
    int main(void)
    {
    	struct node * head;//head 用来放链表头结点的地址
    	struct node * mid;
    	//struct node * ptr;
    	
    	puts("......Find middle element......\n");
    	puts("Input numbers in the next line:\n");
    	
    	head=(struct node *)malloc(LEN);
    	
    	head=CreateList();
    	printf("The list members are :============================\n");
    	//遍历链表
    	TraverseList(head);//遍历 
    	
    	mid = findmid(head);
    	printf("mid = %d\n",mid->date);
    	
    	return 0;
    }
    
    



  • 相关阅读:
    depression...
    Childhood is certainly not the happiest time of your time
    我在上海的日子(前言)
    struts国际化的一点尝试
    脚本(js)控制页面输入
    db2和oracle的一些区别
    工作几年是个坎?
    来深圳这半个月
    10年编程无师自通
    初试java mail
  • 原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/12007666.html
Copyright © 2011-2022 走看看