`

链表逆序-C++实现

 
阅读更多

转自 http://blog.csdn.net/niuer09/article/details/5961004(有图有代码)。

 

 

#include <stdio.h>
#include <stdlib.h>

typedef struct tagListNode{
    int data;
    struct tagListNode* next;
}ListNode, *List;

void PrintList(List head);
List ReverseList(List head);

int main()
{
    //分配链表头结点
    ListNode *head;
    head = (ListNode*)malloc(sizeof(ListNode));
    head->next = NULL;
    head->data = -1;

    //将[1,10]加入链表
    int i;
    ListNode *p, *q;
    p = head;
    for(int i = 1; i <= 10; i++)
    {
        q = (ListNode *)malloc(sizeof(ListNode));
        q->data = i;
        q->next = NULL;
        p->next = q;
        p = q;        
    }

    PrintList(head);           /*输出原始链表*/
    head = ReverseList(head);  /*逆序链表*/
    PrintList(head);           /*输出逆序后的链表*/
    return 0;
}

List ReverseList(List head)
{
    if(head->next == NULL || head->next->next == NULL)  
    {
       return head;   /*链表为空或只有一个元素则直接返回*/
    }

    ListNode *t = NULL,
             *p = head->next,
             *q = head->next->next;
    while(q != NULL)
    {        
      t = q->next;
      q->next = p;
      p = q;
      q = t;
    }

    /*此时q指向原始链表最后一个元素,也是逆转后的链表的表头元素*/
    head->next->next = NULL;  /*设置链表尾*/
    head->next = p;           /*调整链表头*/
    return head;
}

void PrintList(List head)
{
    ListNode* p = head->next;
    while(p != NULL)
    {
        printf("%d ", p->data);
        p = p->next;
    }
    printf("/n");
}
分享到:
评论

相关推荐

    C++链表逆序经典实现

    IT公司最常见笔试题。2010-06-07编写。欢迎讨论。 QQ:114723704

    链表C++实现

    链表C++实现,增加,删除,逆序,获取链表长度,清空链表,定位链表等等

    双向循环链表C++源代码

    双向的循环链表的C++源代码 实现正逆序遍历,链表归并,插入,删除,查询等基本操作

    c++实现 不带头结点单链表基本操作

    利用c++实现不带头结点链表的基本操作实现,如逆序建立链表,插入、删除链表元素等。

    C++链表倒序实现方法

    主要介绍了C++链表倒序实现方法,是一个很经典的C++链表操作实例,需要的朋友可以参考下

    c++ 模板 双向链表 操作

    c++模板实现双向链表操作如逆序建立双向链表,插入结点等。

    c++实现单链表基本操作

    实现带头结点单链表的基本操作如逆序建立链表、插入、删除等操作。

    C++实现接两个链表实例代码

    C++实现接两个链表实例代码 有以ha为头结点的链表,元素个数为m;以hb为头结点的链表,元素个数为n。现在需要你把这两个链表连接起来,并使时间复杂度最小,请分析并实现。 思路: 很简单的链表操作的题目,逆序...

    关于双向链表的增删改查和排序的C++实现

    由于双向链表可以方便地实现正序和逆序两个方向的插入、查找等功能,在很多算法中经常被使用, 这里用C++构造了一个双向链表,提供了对双向链表的插入、查找、删除节点、排序等功能,其中排序提供了插入排序和冒泡...

    C++逆序创建链式线性表

    采用C++编程语言,具有详细的代码注释说明,实现逆序创建链式线性表:输入、输出、插入、删除等操作。

    链表就地倒序

    C++实现让链表就地逆序,是数据结构课的作业,附带可以执行的C++工程。

    C语言实现带头结点的单向链表的基本操作

    使用C语言实现了单向链表的创建,输出,插入元素和删除元素以及单向链表的逆序连接和两个有序线性表的归并

    数据结构(C++)有关练习题

    首先用C++实现单链表编程,再基于编写好的单链表类,实现堆栈类的定义和实现。 c. 链表类和堆栈类都要包含必要的成员函数(按照教材要求)。 2、 已知a[n]为整数数组,试写出实现下列运算的递归代码(C或C++...

    面向对象的单链表,在数据结构中使用

    面向对象的单链表,数据结构中使用,使用C语言!谢谢,祝使用愉快

    新手学习C++入门资料

    输入和输出是通过C++类来实现的,cin和cout是这些类的实例,他们是在C++语言的外部实现。 在C++语言中,有了一种新的注释方法,就是‘//’,在该行//后的所有说明都被编译器认为是注释,这种注释不能换行。C++中...

    数据结构 栈、队列应用 C++

    7. 递归及应用2:使用递归逆序输出链表中的各元素数据 8. (注:提高可不做)栈的应用3(可使用顺序栈或链栈完成):使用递归的回溯法实现迷宫程序(提示:程序分为两大模块,根据数据生成地图,漫游地图) 9....

    C/C++招聘考试题目.rar

    C++招聘考试题目.rar • 题目描述: 通过键盘输入任意一个字符串序列,字符串可能包含多个子串,子串以空格分隔。请编写一个程序,自动...将输入的一个单向链表,逆序后输出链表中的值。链表定义如下: typedef struc

    C/ C++语言经典算法

    包括:图的最小生成树、简单的猫捉老鼠游戏、利用栈来实现单链表的逆序、十字链表的生成、递归算法的应用、二叉树的集合操作、广度优先搜索及深度优先搜索、栈和队列的一个应用、简单的行编辑程序、插入排序等算法。

    传智播客扫地僧视频讲义源码

    本教程共分为5个部分,第一部分是C语言提高部分,第二部分为C++基础部分,第三部分为C++进阶部分,第四部分为C、C++及数据结构基础部分,第五部分为C_C++与设计模式基础,内容非常详细. 第一部分 C语言提高部分目录...

Global site tag (gtag.js) - Google Analytics