• 未知链表的求中间位置


    直接上代码:

    /*
    
    设置两个指针*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;
    }
    
    



  • 相关阅读:
    最长公共子序列-动态规划
    归并排序
    最大子段和-3种方法
    kafka compaction 分析(基于kafka 0.10.2版本)
    [转载]interp1
    [转]mat2gray函数原理分析
    Java 位运算(移位、位与、或、异或、非)与逻辑运算
    ML01a
    [第1集] 机器学习的动机与应用
    tap4fun公司面试总结
  • 原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/12007665.html
Copyright © 2020-2023  润新知