C/C++ code#include
#define INTSIZE sizeof(int)
#define NODESIZE sizeof(int)+sizeof(char *)
#define ERROR {printf("error\n");return;}
int main()
{
int i;
char *p,*q,*first,*malloc();
if((p=malloc(NODESIZE))==NULL)ERROR /*申请NODESIZE个字节的内存空间,将首地址给p*/
first=p; /*设置first为指向链表头的指针*/
*(int *)p=1; /*将p强转成int型指针,并对p所指向的变量赋值,即*p=1*/
p+=INTSIZE; /*p指针下移两个字节*/
for(i=2;i<10;i++,p+=INTSIZE)
if((q=malloc(NODESIZE))==NULL)ERROR /*为第i个元素申请NODESIZE个字节的内存空间,将首地址给q*/
else
{
*(char **)p=q; /*将p强制升级成指向字符的二级指针,并将一级指针q的地址放在p中
此时第(i-1)个数据元素的指针域存放的就是第i个节点的地址*/
p=q; /*将q赋给p,此时p指向第i个数据元素的首地址*/
*(int*)p=i; /*将p强转成int型指针,并将p所指向的变量赋值为i*/
}
*p=NULL; /*链表的结尾处指针域为空*/
for(p=first;p;p+=INTSIZE,p=*(char **)p=i) /* 打印链表值*/
printf("%d",*(int *)p);
putchar('\n');
}