双向链表反转

作者: dawter | 来源:发表于2016-08-25 23:26 被阅读104次

双向链表反转

  • 初始化
  • 输出
  • 反转

实现代码

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

struct list {
        int data;
        struct list *prev;
        struct list *next;
};

struct list* list_init(int n)
{
        int i;
        size_t size = 0;
        struct list *pn = NULL;
        struct list *p = NULL;

        size = sizeof(struct list);
        if(n <= 0) {
                return NULL;
        } else {
                p = malloc(size);
                p->data = 0;
                p->next = NULL;
                p->prev = NULL;
        }
        pn = p;

        for(i=1; i<n; i++) {
                p->next = malloc(size);
                p->next->prev = p;
                p = p->next;
                p->data = i;
        }
        p->next = NULL;

        return pn;
}

void list_print(struct list* pn)
{
        struct list *p = NULL;
        printf("output:\n");
        while(pn) {
                printf("%2d ", pn->data);
                p = pn;
                pn = pn->next;
        }
        printf("\nreverse output:\n");
        while(p) {
                printf("%2d ", p->data);
                p = p->prev;
        }
        printf("\n");
}

struct list* list_reverse(struct list* pn)
{
        struct list *q = NULL;
        struct list *p = NULL;

        while(pn) {
                p = pn->next;
                pn->next = q;
                pn->prev = p;
                q = pn;
                pn = p;
        }
        return q;
}

int main(int argc, char** argv)
{
        int ret;
        int len;
        struct list *head = NULL;

        printf("input length:");
        scanf("%d", &len);

        head = list_init(len);
        list_print(head);

        head = list_reverse(head);
        list_print(head);
        return ret;
}

尚未实现

  • 插入元素
  • 删除元素

双向链表反转实在是没有必要,应该是仅在面试笔试时才回出现的吧

相关文章

  • Python实现双向链表

    Python实现双向链表的增删改查,反转链表

  • 双向链表反转

    双向链表反转 初始化 输出 反转 实现代码 尚未实现 插入元素 删除元素 双向链表反转实在是没有必要,应该是仅在面...

  • 双向链表反转

  • 数据结构-链表

    相关掌握点 单向链表 双向链表 反转单向链表 判断链表是否含有环 链表构建 链表是一种线性结构,是通过指针引用节点...

  • 《剑指offer》逆转链表

    问题: 输入一个链表,从尾到头打印链表每个节点的值。 实现方式: 双向链表 单项链表通过交换元素进行反转链表(我的...

  • Java常用类库与技巧-集合

    一 数据结构常见问题 数组和链表的区别;链表的操作,如反转,链表环路检测,双向链表,循环链表相关操作;队列,栈的应...

  • 双向链表&双向循环链表

    链表分为:单链表、单向循环链表、双向链表、双向循环链表本节主要说明:双向链表、双向循环链表 定义结点 一、双向链表...

  • 线性表-双向链表与双向循环链表

    双向链表 双向链表示意图如下: 数据结构定义 创建双向链表 双向链表插入元素 双向链表删除元素 双向链表打印元素 ...

  • day03-双向链表

    双向链表: 单向链表只能单向查找,双向链表可以双向查找。 啥是双向链表? 双向链表可以双向查数据,所以就不存在单向...

  • 线性表--链式存储结构--双向链表

    双向链表 一、双向链表结构 双向链表结点结构 既然单链表可以有循环链表,那么双向链表当然也可以有。 由于这是双向链...

网友评论

    本文标题:双向链表反转

    本文链接:https://www.haomeiwen.com/subject/pjiasttx.html