⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 从尾部插入生成单链表并判断是否存在循环.c

📁 用C语言实现从表头/表尾插入来创建链表
💻 C
字号:
#define TURE 1
#define FALSE O
#include "stdio.h"
#include "malloc.h"

typedef struct node//定义节点类型。
 {
	int data;
    struct node *next;
 }Node,*LinkList;


LinkList CreateFromTail(int longsize,int point)//longsize为链表长度,point为循环链表的出现循环的位置。
{
 int i;
 LinkList L;//L为链表的头指针。
 Node *r,*s;//r始终指向链表的尾结点,s始终指向当前申请的结点。
 L=(Node*)malloc(sizeof(Node));//初始链表。
 L->next=NULL;//链表尾部指向空。
 r=L,s=L;//r指向链表的尾结点,s指向新申请结点,若生成链表为空表,则s指向头结点。
 if((point<0||point>longsize)&&longsize<=0)//处理异常。
   {
    printf("\n\n\n\ninput error!\n the point must >=-1 and <=longsize\n longsize must >=0\n\n\n\n\n");
	return L;
   }
 else
   {
    if(point==-1)//无循环。
      {
       for(i=0;i<longsize;i++)
	  {
	   s=(Node*)malloc(sizeof(Node));
	   r->next=s;
	   r=s;
	  }
       r->next=NULL;
       return L;
      }
    else//有循环。
      {
	  for(i=0;i<longsize;i++)
	     {
	      s=(Node*)malloc(sizeof(Node));
	      r->next=s;
	      r=s;
	     }
	     r=L;
	  for(i=0;i<point;i++)
	     {
	      r=r->next;
	     }
	  s->next=r;
	  return L;
	   }
  }
}//CreateFromTail(int longsize,int point)


void CheckLinklist(LinkList L)//检测链表L中是否存在循环。
{
	LinkList r,s;
    if(L->next==NULL)
	{
	 printf("该链表是一个空链表.\n");
	 return;
	}
    r=L;
    s=L->next;
	if(r==s)
	{
     printf("该链表是一个空循环链表链表.\n");
	 return;
	}
    while(r!=s&&s!=NULL)
    {
     r=r->next;
	 if(s->next!=NULL)
	 {
       s=s->next->next;
	 }
	 else
	 {
        printf("\n\n\n\n该链表不是一个循环链表。\n\n\n\n"); 
		return;
	 }
    }
    if(r==s)//当s追上r且s!=NULL的时候表明链表L中存在循环。
    {
     printf("\n\n\n\n该链表是一个循环链表。\n\n\n\n");
	 return;
    }
    else//否则链表L中不存在循环。
    {
    printf("\n\n\n\n该链表不是一个循环链表。\n\n\n\n");  
	return;
    }
}//CheckLinklist(LinkList L)




void main()
{
	LinkList L;
    int longsize,point;
    printf("请输入链表的长度(longsize)和出现循环的节点位置(piont):例如:12,3\n如果你不想让链表中出现循环,请将piont赋为-1:");
    scanf("%d,%d",&longsize,&point);
    L=CreateFromTail(longsize,point);
    CheckLinklist(L);
}//main()

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -