链表创建 和 倒置
2012-07-24 11:07
225 查看
#define MAX_ITEM 10
typedef struct node *link;
struct node{
int data;
link next;
};
link Create();
void Destory(link head);
void Print(link head);
link Revert(link head);
Node Create() {
link x = NULL;
link head = (link) malloc(sizeof(struct node));
x = head;
for (int i = 0; i < MAX_ITEM ; i++) {
link newNode = (link)malloc(sizeof(struct node));
newNode->data = i;
newNode->next = NULL;
x->next = newNode;
x = x->next;
}
return head;
}
void Destory(link *head) {
link node = head;
while(node != NULL) {
link tmpNode = node ->next;
free(node);
node = tmpNode;
}
}
void Print(link *head) {
if (head == NULL)
return;
while(head) {
printf("%d", head->data);
head = head->next;
}
}
link Revert(link head) {
link preNode, curNode, nextNode;
if (head == NULL) //空链表
return NULL;
if (head->next == NULL) //仅一个元素
return head;
preNode = NULL;//初始化
curNode = head;
while(curNode) {
nextNode = curNode->next;//先记录下一个结点
curNode->next = preNode;//改变链表方向(逆置)
preNode = curNode;//将当前结点作为下一次循环的前一个结点
curNode = nextNode;//向后推移一个结点
}
return preNode;//当遍历完链表后curNode应该为空,此时preNode就是逆置后链表头(head)
}
typedef struct node *link;
struct node{
int data;
link next;
};
link Create();
void Destory(link head);
void Print(link head);
link Revert(link head);
Node Create() {
link x = NULL;
link head = (link) malloc(sizeof(struct node));
x = head;
for (int i = 0; i < MAX_ITEM ; i++) {
link newNode = (link)malloc(sizeof(struct node));
newNode->data = i;
newNode->next = NULL;
x->next = newNode;
x = x->next;
}
return head;
}
void Destory(link *head) {
link node = head;
while(node != NULL) {
link tmpNode = node ->next;
free(node);
node = tmpNode;
}
}
void Print(link *head) {
if (head == NULL)
return;
while(head) {
printf("%d", head->data);
head = head->next;
}
}
link Revert(link head) {
link preNode, curNode, nextNode;
if (head == NULL) //空链表
return NULL;
if (head->next == NULL) //仅一个元素
return head;
preNode = NULL;//初始化
curNode = head;
while(curNode) {
nextNode = curNode->next;//先记录下一个结点
curNode->next = preNode;//改变链表方向(逆置)
preNode = curNode;//将当前结点作为下一次循环的前一个结点
curNode = nextNode;//向后推移一个结点
}
return preNode;//当遍历完链表后curNode应该为空,此时preNode就是逆置后链表头(head)
}
相关文章推荐
- 单链表之创建与倒置
- C 语言经典题目系列解决方案(3)-链表创建与倒置
- 链表创建,显示,删除和倒置
- 链表的基本操作(创建,查找指定位置元素,删除指定元素,插入,倒置,去重,求集合的差,分别交换结点与交换结点值实现的冒泡排序,将两个有序链表合并成一个有序链表)c语言实现
- Java中单链表的实现和单链表的反转(倒置)
- 头插法和尾插法创建、删除、遍历单链表
- 链表的创建代码详解
- 如何创建一个链表
- 【数据结构】 第二章 创建链表
- 链表倒置
- 链表的创建、逆序等操作
- [c] 单链表创建,打印和反转
- 树的孩子链表表示法可执行代码(创建,层次遍历)
- 链表初解(二)——双链表的创建、删除、插入
- 带头节点链表的操作(链表的创建、删除、查找、逆转、打印等等)
- C++链表的创建和插入删除的实现
- 单链表基本操作的实现--创建、插入、查找、删除
- c++双向链表操作示例(创建双向链、双向链表中查找数据、插入数据等)
- VC实现链表的创建与输出
- 链表的创建,删除,插入小型程序。