C语言(8) - 反转单向链表
2009-06-10 16:41
357 查看
/*
beango
2009-6-10
*/
#include <stdio.h>
typedef struct _Node
{
int data;
struct _Node* next;
}Node;
typedef struct _List
{
Node* head;
}List;
List list;
//增加节点到链表的最未端
void Insert(Node* node)
{
Node* _head = list.head;
if (_head==NULL)
{list.head = node;node->next = NULL;}
else
{
Node* _node = _head;
while (_node->next!=NULL)
_node = _node->next;
_node->next = node;
node->next = NULL;
}
}
//获取索引处的元素
Node* getItem(int index)
{
if (index>=0)
{
if (index==0)
{
return list.head;
}
else
{
Node* node = list.head;
while (index-->0)node = node->next;
return node;
}
}
}
//输出链表
void ToString()
{
Node* _node = list.head;
if (_node!=NULL)
{
printf("%2d",_node->data);
while (_node->next!=NULL)
{
_node = _node->next;
printf("%2d ",_node->data);
}
}
}
/*
*/
void Reverse(void)
{
Node* _newhead;
Node* _node1;Node* _node2;
if (list.head!=NULL)
{
_newhead = list.head;
_node1 = list.head->next;
if (_node1!=NULL)
{
list.head->next = NULL;
while (_node1->next!=NULL)
{
_node2 = _node1->next;
_node1->next = _newhead;
_newhead = _node1;
_node1 = _node2;
}
_node1->next = _newhead;
_newhead = _node1;
}
}
list.head = _newhead;
}
int main(void)
{
Node node0 ={0,NULL};
Insert(&node0);
Node node1 = {1,NULL};
Insert(&node1);
Node node2 = {2,NULL};
Insert(&node2);
Node node3 = {3,NULL};
Insert(&node3);
ToString();
int _itenIndex = 0;
Node* _item = getItem(_itenIndex);
printf("\nlist[%d]=%d\n",_itenIndex,_item->data);
Reverse();
ToString();
return 0;
}
beango
2009-6-10
*/
#include <stdio.h>
typedef struct _Node
{
int data;
struct _Node* next;
}Node;
typedef struct _List
{
Node* head;
}List;
List list;
//增加节点到链表的最未端
void Insert(Node* node)
{
Node* _head = list.head;
if (_head==NULL)
{list.head = node;node->next = NULL;}
else
{
Node* _node = _head;
while (_node->next!=NULL)
_node = _node->next;
_node->next = node;
node->next = NULL;
}
}
//获取索引处的元素
Node* getItem(int index)
{
if (index>=0)
{
if (index==0)
{
return list.head;
}
else
{
Node* node = list.head;
while (index-->0)node = node->next;
return node;
}
}
}
//输出链表
void ToString()
{
Node* _node = list.head;
if (_node!=NULL)
{
printf("%2d",_node->data);
while (_node->next!=NULL)
{
_node = _node->next;
printf("%2d ",_node->data);
}
}
}
/*
*/
void Reverse(void)
{
Node* _newhead;
Node* _node1;Node* _node2;
if (list.head!=NULL)
{
_newhead = list.head;
_node1 = list.head->next;
if (_node1!=NULL)
{
list.head->next = NULL;
while (_node1->next!=NULL)
{
_node2 = _node1->next;
_node1->next = _newhead;
_newhead = _node1;
_node1 = _node2;
}
_node1->next = _newhead;
_newhead = _node1;
}
}
list.head = _newhead;
}
int main(void)
{
Node node0 ={0,NULL};
Insert(&node0);
Node node1 = {1,NULL};
Insert(&node1);
Node node2 = {2,NULL};
Insert(&node2);
Node node3 = {3,NULL};
Insert(&node3);
ToString();
int _itenIndex = 0;
Node* _item = getItem(_itenIndex);
printf("\nlist[%d]=%d\n",_itenIndex,_item->data);
Reverse();
ToString();
return 0;
}
相关文章推荐
- C语言实现单向链表的反转
- (C语言)链表的反转(一次遍历)
- 数据结构C语言>3基本链表>3-8链表结构的反转
- 单向链表反转(循环和递归)
- C递归实现单向链表的反转
- 自己实现C语言单向链表
- 使用递归和非递归方式反转单向链表
- 反转单向链表
- C语言单向动态链表程序,实现链表的建立,合并,重新排序,链表元素的插入与删除,以及根据元素成员的值进行元素删除。
- 单链表反转C语言实现
- C语言单向链表的表示与实现实例详解
- 单向链表遍历反转 Javascript实现
- 最基本的单向链表操作 C语言
- C语言实现,无头结点不带环的单向链表的基本操作
- C语言:链表的反向输出(反转链表+栈结构)
- 数学解题(一)单向链表反转
- C语言单向链表:创建&&打印#ShadowFox个人作品
- 反转单向链表(JAVA)
- C语言单向循环链表解决约瑟夫问题
- C语言单向链表的操作(持续更新中)