惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

量子位
Stack Overflow Blog
Stack Overflow Blog
人人都是产品经理
人人都是产品经理
The GitHub Blog
The GitHub Blog
Engineering at Meta
Engineering at Meta
Vercel News
Vercel News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Y
Y Combinator Blog
The Cloudflare Blog
Last Week in AI
Last Week in AI
B
Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog
V
Visual Studio Blog
博客园 - 三生石上(FineUI控件)
小众软件
小众软件
Google DeepMind News
Google DeepMind News
D
DataBreaches.Net
博客园 - 司徒正美
B
Blog RSS Feed
Microsoft Azure Blog
Microsoft Azure Blog
罗磊的独立博客
Hugging Face - Blog
Hugging Face - Blog
L
LangChain Blog

博客园 - ________囧丶殇

django系列 - 安装和新建项目 SQL - 基础 javascript刷新父页面 SQL - 约束 C语言(7) - 数据结构之单向链表 C语言(6) - 各种排序算法的比较 C语言(5) - 选择排序 快速排序 C语言(4) - 插入排序 C语言(3) - 冒泡排序 归并排序 C语言(2) - 从指针开始 C语言(1) - 开始之前 python实践 - 抓取网页中的图片和数据 python实践 - 下载文件 python补充(2) - 内置函数 python补充(1) python笔记(十) - 异常和文件处理 python笔记(九) - 类 part2 python笔记(八) - 类 part1 python笔记(七) - and和or
C语言(8) - 反转单向链表
________囧丶殇 · 2009-06-10 · via 博客园 - ________囧丶殇

 /*

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;
}