关于单链表的逆置有关问题
关于单链表的逆置问题
刚开始学数据结构,做一个逆置程序,昨天搜出来一个程序,就是有好多疑问望高手解释下程序。
#include <stdio.h>
typedef struct QLink
{
int data;
struct QLink *next;
}QLink;
main()
{
QLink *head,*p,*q;
int length,i;
printf( "此程序是实现链表置逆的功能.\n ");
printf( "请输入链表的长度: ");
scanf( "%d ",&length);
printf( "现在要输入各结点的值.\n ");
for(i=1;i <=length;i++)
{
p=(QLink *)malloc(sizeof(QLink));
scanf( "%d ",&p-> data);
p-> next=NULL;
if(i==1) head=p;
else
{
q=head;
while(q-> next!=NULL) q=q-> next; // 这一部分代码什么意思,
q-> next=p; //为什么这么写啊??
}
}
printf( "链表已建立,现在要将它输出.\n ");
p=head;
for(i=1;i <=length;i++)
{
printf( "%d ",p-> data);
p=p-> next;
}
printf( "\n ");
printf( "现在要将其置逆.\n ");
printf( "程序置逆中……\n ");
printf( "置逆成功.现在要将新的链表输出.\n ");
p=head;
while(head-> next!=NULL)
{ 这一部分是逆置的程序,看不懂什么意思
刚开始学数据结构,做一个逆置程序,昨天搜出来一个程序,就是有好多疑问望高手解释下程序。
#include <stdio.h>
typedef struct QLink
{
int data;
struct QLink *next;
}QLink;
main()
{
QLink *head,*p,*q;
int length,i;
printf( "此程序是实现链表置逆的功能.\n ");
printf( "请输入链表的长度: ");
scanf( "%d ",&length);
printf( "现在要输入各结点的值.\n ");
for(i=1;i <=length;i++)
{
p=(QLink *)malloc(sizeof(QLink));
scanf( "%d ",&p-> data);
p-> next=NULL;
if(i==1) head=p;
else
{
q=head;
while(q-> next!=NULL) q=q-> next; // 这一部分代码什么意思,
q-> next=p; //为什么这么写啊??
}
}
printf( "链表已建立,现在要将它输出.\n ");
p=head;
for(i=1;i <=length;i++)
{
printf( "%d ",p-> data);
p=p-> next;
}
printf( "\n ");
printf( "现在要将其置逆.\n ");
printf( "程序置逆中……\n ");
printf( "置逆成功.现在要将新的链表输出.\n ");
p=head;
while(head-> next!=NULL)
{ 这一部分是逆置的程序,看不懂什么意思