C语言采用头插法打印单链表

1.单链表存储结构 

typedef struct Node  /*结点类型定义*/
{char data;
struct Node *next;    
}Node,*LinkList;    /*LinkList为结构指针类型*/ 

2.初始化单链表

void InitList(LinkList *L)
{*L=(LinkList)malloc(sizeof(Node)); /*建立头结点*/
(*L)->next=NULL;                     /*建立空的单链表L*/ 
}

3.头插法建表

void CreatFromHead(LinkList L)
{Node *s;
char c;
int flag=1;
while(flag)
    {c=getchar();
    if(c!='$')
        {s=(Node*)malloc(sizeof(Node));/*建立新结点s*/
        s->data=c;
        s->next=L->next;/*将s结点插入表头*/ 
        L->next=s;        
        }
    else
        flag=0;
    }    
}

4.打印单链表

void PrintLinkList(Node *L)
{Node *temp=L;
while(temp->next)
    {temp=temp->next;
    printf("%c",temp->data);        
     }     
}

5.主函数

int main()
{Node *L;
InitList(&L);
CreatFromHead(L);    
PrintLinkList(L);    
return 0;    

以上就是用头插法实现打印单链表的过程。

不过嘛,对于我这个小白来说还有一个错误确实是粗心大意了!!!

来看小白的严重失误......

int main()
{Node *L;
InitList(*L);      /*     *L重大错误,正确的应该为&L     */ 
CreatFromHead(L);    
PrintLinkList(L);    
return 0;    
}

 

 OK,来看完整代码!

#include<stdio.h>
#include<stdlib.h>
/*定义结构体类型*/ 
typedef struct Node  /*结点类型定义*/
{char data;
struct Node *next;	
}Node,*LinkList;	/*LinkList为结构指针类型*/ 
/*初始化单链表*/ 
void InitList(LinkList *L)
{*L=(LinkList)malloc(sizeof(Node)); /*建立头结点*/
(*L)->next=NULL; 					/*建立空的单链表L*/ 
}
/*头插法建表*/
void CreatFromHead(LinkList L)
{Node *s;
char c;
int flag=1;
while(flag)
	{c=getchar();
	if(c!='$')
		{s=(Node*)malloc(sizeof(Node));/*建立新结点s*/
		s->data=c;
		s->next=L->next;/*将s结点插入表头*/ 
		L->next=s;		
		}
	else
		flag=0;
	}	
}
/*打印单链表*/ 
void PrintLinkList(Node *L)
{Node *temp=L;
while(temp->next)
	{temp=temp->next;
	printf("%c",temp->data);		
	 } 	
}
/*主函数*/
int main()
{Node *L;
InitList(&L);
CreatFromHead(L);	
PrintLinkList(L);	
return 0;	
}

 


版权声明:本文为qq_52621705原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。