写一个链表的的操作的例子,虽然没什么难度,但是好久没写了,练练手。
#include<stdio.h>

typedef struct tagLinkNode //定义一个节点结构体
...{
char m_type;
struct tagLinkNode *next;
}LinkNode;

LinkNode* CreatLinkList(int n) //创建链表的函数
...{
//L为指向头节点的指针
LinkNode* L, *ptr, *p; //p为指向新申请内存空间的节点
//ptr为插入前驱节点
int i;
L = (LinkNode*)malloc(sizeof(LinkNode)); //申请头节点,并用L指向它
L->next = NULL; //初始化头节点的next域
L->m_type = '0'; //将头节点的m_type域设置为'0'
//以作为标记
ptr = L; //初始化前驱指针
printf("输入字母(每个字母以回车键作为结束): ");
for(i = 0; i < n; i++) //依次创建节点
...{
p = (LinkNode*)malloc(sizeof(LinkNode));
if(p == NULL) 
...{
printf("malloc error!");
}
scanf("%c", &(p->m_type));
fflush(stdin); //刷新stdin
p->next = ptr->next; //插入一个节点的算法
ptr->next = p;
ptr = p;
}
return L; //返回指向头节点的指针
}
LinkNode* RotateList(LinkNode* Head) //链表倒转函数
...{
LinkNode *p1, *p2; //p2为游标指针
LinkNode *L = Head;
p1 = Head;
p2 = Head->next;
while(p2) //顺次从链表中拿下一个节点然后分别插入到前面 
...{
p1->next = p2->next;
p2->next = L;
L = p2;
p2 = p1->next;
}
return L; //返回新的头指针
}
void PrintLinkList(LinkNode* Head) //输出链表的函数
...{
LinkNode *p = Head;
if(p->m_type != '0') //这是倒转后的输出
...{
printf(" 倒转后为: ");
while(p->m_type != '0') //当遇到头节点时停止输出
...{
printf("%c ",p->m_type);
p = p->next;
}
}
else //这是倒转前的输出
...{
printf(" 显示输出为: ");
p = p->next; //跳过头节点
while(p)
...{
printf("%c ",p->m_type);
p = p->next;
}
}
}
int main()
...{
int n = 5;
LinkNode *head; //定义一个表头指针 
head = CreatLinkList(n); //创建链表
PrintLinkList(head); //打印输出
head = RotateList(head); //倒转链表
PrintLinkList(head); //打印输出
}

3485

被折叠的 条评论
为什么被折叠?



