• 共谋节点两个单列表


    题目:输入两个单链表。找出公共结点。

    思路:若两个单链表有公共结点。其形状必然为“Y”型,也就是说公共结点后的全部结点都是同样的。

    我们首先获得两个链表的长度。求得长度之差为n,再定义两个指针分别指向两个链表首部,长链表先走n步,然后两个指针同一时候走,直到两个指针所指向的值全然同样时停止。

    代码:
    /*
    求链表公共结点
    */
    #include<stdio.h>
    #include<stdlib.h>
    typedef struct _NODE_
    {
    	int data;
    	struct _NODE_ *next;
    }Node,*pNode;
    int get_length(pNode list)
    {
    	if(list == NULL)
    	{
    		return 0;
    	}
    	int len = 0;
    	pNode pTemp = list;
    	while(pTemp != NULL)
    	{
    		len++;
    		pTemp = pTemp->next;
    	}
    	return len;
    }
    void create(pNode *list,int n)
    {
    	if(n <= 0)
    	{
    		return;
    	}
    	*list = (pNode)malloc(sizeof(Node));
    	if(!list)
    	{
    		exit(-1);
    	}
    	int data;
    	scanf("%d",&data);
    	(*list)->data = data;
    	(*list)->next = NULL;
    	pNode pTemp = *list;
    	for(int i = 0; i < n-1; i++)
    	{
    		scanf("%d",&data);
    		pNode pNew = (pNode)malloc(sizeof(Node));
    		if(!pNew)
    		{
    			exit(-1);
    		}
    		pNew->data = data;
    		pNew->next = NULL;
    		pTemp->next = pNew;
    		pTemp = pNew;
    	}
    }
    //求单链表公共结点
    pNode FindCommonNode(pNode list1,pNode list2)
    {
    	if(list1 == NULL || list2 == NULL)
    	{
    		return NULL;
    	}
    	int len1 = get_length(list1);
    	int len2 = get_length(list2);
    	
    	int dif = len1 - len2;
    	pNode pLong = list1;
    	pNode pShort = list2;
    	if(dif < 0)
    	{
    		pLong = list2;
    		pShort = list1;
    		dif = len2-len1;
    	}
    	while(dif > 0)
    	{
    		pLong = pLong->next;
    		dif--;
    	}
    	while(pLong != NULL && pShort != NULL && pLong != pShort)
    	{
    		pLong = pLong->next;
    		pShort = pShort->next;
    	}
    	return pLong;
    }
    void Destroy(pNode *list)
    {
    	if(*list == NULL)
    	{
    		return;
    	}
    	pNode p = *list,q;
    	while(p != NULL)
    	{
    		q = p->next;
    		free(p);
    		p = q;
    	}
    }

    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    Oracle 11g导出空表
    如何破解ROS路由器禁用路由PPPOE拨号?
    Oracle入门心得(2)
    ORACLE了局,每天10问(五)
    若何消除Oracle数据库的安静隐患(3)
    Oracle入门心得(1)
    ORACLE用户自定义备份与恢复条记
    ORACLE成绩,每天10问(三)
    ORACLE问题,每天10问(一)
    怎样消除Oracle数据库的安全隐患(1)
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4646122.html
Copyright © 2020-2023  润新知