C语言实现双向非循环链表的逆序打印

我在上一篇博客中《C语言实现双向非循环链表》实现了如何构造一个双向非循环链表,并实现了正向打印。我还在之前一篇博客《C语言实现单链表的逆序打印》中实现了单链表的逆序打印。这篇博客我们来实现对双向非循环链表进行逆序打印,实现起来非常的简单。代码已经上传至 https://github.com/chenyufeng1991/ReverseDoubleLinkedList 。

核心代码如下:

//打印非循环双向链表,这个其实是正向打印
void printList(Node *pNode){
    if (pNode == NULL) {
        printf("%s函数执行,链表为空,打印失败\n",__FUNCTION__);
    }else{
        while (pNode != NULL) {
            printf("%d ",pNode->element);
            pNode = pNode->next;
        }
        printf("\n");
    }
}
//逆序打印双向非循环链表
void ReversePrintList(Node *pNode){

    Node *pMove;
    pMove = pNode;

    if (pNode == NULL) {
        printf("%s函数执行,双向非循环链表为空,逆序打印失败\n",__FUNCTION__);
    }else{
        //从前往后遍历到最后一个节点
        while (pMove->next != NULL) {
            pMove = pMove->next;
        }

        //从后往前遍历到第一个节点,同时打印节点值
        while (pMove != NULL) {

            printf("%d ",pMove->element);
            pMove = pMove->prior;
        }
        printf("\n%s函数执行,双向非循环链表逆序打印成功\n",__FUNCTION__);
    }
}

通过仔细研究代码可以发现,想要逆序一个链表,使用双向链表比使用单链表简单地多。

时间: 2024-08-04 08:51:31

C语言实现双向非循环链表的逆序打印的相关文章

C语言实现双向非循环链表的节点插入

我在之前一篇博客中<C语言实现双向非循环链表的逆序打印>讲到了如何逆序输出一个双向非循环链表,让我们对这种链表类型有了理性的认识.今天我们要来实现的是对双向非循环链表进行节点的插入.大家可以和<C语言实现单链表节点的插入>单链表的节点插入对比着学习.代码上传至  https://github.com/chenyufeng1991/InsertDoubleLinkedList . 核心代码如下: Node *InsertList(Node *pNode,int pos,int x){

C语言实现双向非循环链表(带头结点尾结点)的节点插入

对于双向链表,个人推荐使用带头结点尾结点的方式来处理会比较方便.我在<C语言实现双向非循环链表(不带头结点)的节点插入>中详细实现了在不带头结点的情况下的插入.这次我们将会来在使用头结点尾结点的情况下在任意的位置插入元素.代码上传至 https://github.com/chenyufeng1991/InsertNodeDoubleLinkedList_HeadNode . 核心代码如下: //插入一个节点 //插入位置分别为0,1,2,..... int InsertNodeList(Nod

C语言实现双向非循环链表的清空

我在之前一篇博客<C语言实现单链表的基本操作>实现了如何清空一个单链表,现在换成了双向的非循环链表,整体思路是一样的.代码上传至:https://github.com/chenyufeng1991/ClearDoubleLinkedList  . 核心代码如下: Node *ClearDoubleLinkedList(Node *pNode){ if (pNode == NULL) { printf("%s函数执行,原链表就是空链表,无须执行该方法\n",__FUNCTIO

C语言实现链表的逆序打印

我在前面几篇博客中<C语言实现链表节点的插入><C语言实现链表节点的删除><C实现头插法和尾插法来构建链表><C语言实现链表的基本操作>实现了链表的很多增删改查操作.这里我们要来实现链表的逆序打印,使用C来实现.代码上传至 https://github.com/chenyufeng1991/ReverseLinkedList . 基本算法是: (1)使用尾插法构建原链表: (2)依次遍历原链表: (3)取出遍历中的节点使用头插法建立一个新链表: (4)打印逆

c语言 给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

    6,给一个不多于5位的正整数,要求:一.求它是几位数,二.逆序打印出各位数字. //    int num = 0,temp = 0,i = 0; //    printf("输入一位数字:"); //    scanf("%d",&num); //    while (num>0) { //        temp = num % 10; //        printf("%d",temp); //        i++

Python练习题 024:求位数及逆序打印

[Python练习题 024] 给一个不多于5位的正整数,要求:一.求它是几位数,二.逆序打印出各位数字. ---------------------------------------------- 这题如果不用递归,实在太简单了!!!代码上: str = input('请输入一个不多于5位的正整数:') print('这个数字是%s位数,逆序为%s.' % (len(str), str[::-1])) 输出结果如下: 请输入一个不多于5位的正整数:45931这个数字是5位数,逆序为13954

输入一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

package com.hanqi; import java.util.*; public class Nixudayin { public static void main(String[] args) { // TODO 自动生成的方法存根 System.out.println("输入一个不多于5位的正整数"); Scanner shu=new Scanner(System.in); String a=shu.next(); System.out.println("输入的

九度OJ 1525 子串逆序打印

题目1525:子串逆序打印 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:2404 解决:388 题目描述: 小明手中有很多字符串卡片,每个字符串中都包含有多个连续的空格,而且这些卡片在印刷的过程中将字符串的每个子串都打印反了,现在麻烦你帮小明将这些字符串中的子串修正过来,同时为了使卡片美观,压缩其中的连续空格为1个. 输入: 输入包含多个测试用例,每个测试用例的第一行是一个正整数 n,1=<n<=100000,代表卡片上字符串的长度.第二行输入长度为n的字符串(字符串仅包含小写

单链表逆序打印!

单链表打印的时候 一般 if (p== NULL) return; printf("%d ",p->data ); reverse_show(p->next); 结果: 123456 就可以依次打印了 但是如果把打印语句放在后面 就会逆序打印 if (p== NULL)return; reverse_show(p->next); printf("%d ",p->data ); 结果 654321 这是因为退出的时候 是从后面进行的!