双向链表反转

双向链表反转

  • 初始化
  • 输出
  • 反转

实现代码

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

尚未实现

  • 插入元素
  • 删除元素

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 大学的时候不好好学习,老师在讲台上讲课,自己在以为老师看不到的座位看小说,现在用到了老师讲的知识,只能自己看书查资...
    和珏猫阅读 5,327评论 1 3
  • 一、 C/C++程序基础 面试例题1——分析代码写输出(一般赋值语句的概念和方法)。 面试例题2—...
    LuckTime阅读 6,156评论 2 42
  • 链表是线性表的链式存储方式,逻辑上相邻的数据在计算机内的存储位置不一定相邻,那么怎么表示逻辑上的相邻关系呢? 可以...
    rainchxy阅读 6,389评论 0 6
  • 转自:http://blog.csdn.net/jackfrued/article/details/4492194...
    王帅199207阅读 12,763评论 3 93
  • “嗡嗡”手机屏幕在黑沉沉的夜里,闪着幽幽的光。 他猛地把手机摔到地上,嘴里还絮絮叨叨。可手机躺在地板上,仍不停地嗡...
    半步之人阅读 3,746评论 37 19

友情链接更多精彩内容