您的位置:首页 > 编程语言 > C语言/C++

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: