单链表反转

单链表反转

  • 单链表初始化
  • 输出
  • 反转
  • 释放

实现代码

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

struct node {
        int data;
        struct node *next;
};

struct node* list_init(int length)
{
        int i = 0;
        struct node *p, *q;
        if(length <= 0) {
                return NULL;
        }else{
                p = malloc(sizeof(struct node));
                p->data = 0;
        }
        for(i=1, q=p; i<length; i++) {
                q->next = malloc(sizeof(struct node));
                q = q->next;
                q->data = i;
        }
        q->next = NULL;
        return p;
}

int list_print(struct node *pnode)
{
        int i;
        for(i=0; pnode; i++) {
                printf("node[%i]: %i\n", i, pnode->data);
                pnode = pnode->next;
        }
        return 0;
}

struct node* list_reverse(struct node *pnode)
{
        struct node *p, *q = NULL;
        while( pnode ) {
                p = pnode->next;
                pnode->next = q;
                q = pnode;
                pnode = p;
        }
        return q;
}

int list_free(struct node *pnode)
{
        struct node *p, *q;
        p = pnode;

        while(p) {
                q = p->next;
                free(p);
                p = q;
        }
        return 0;
}

int main(int argc, char* argv[])
{
        int len;
        struct node *pnode = NULL;

        printf("input number:");
        scanf("%i", &len);

        pnode = list_init(len);
        list_print(pnode);
        list_print(list_reverse(pnode));
        list_free(pnode);
}

尚未实现

  • 元素插入
  • 元素删除
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 最近与人瞎聊,聊到各大厂的面试题,其中有一个就是用java实现单链表反转。闲来无事,决定就这个问题进行一番尝试。 ...
    冬天里的懒喵阅读 4,130评论 1 14
  • 单链表的反转是一道很基本的算法题,一般可以想到以下三种方法: 方法1:将单链表储存为数组,然后按照数组的索引逆序进...
    vincentgemini阅读 221评论 0 0
  • 基本问题 如何将单链表反转? 单链表结构定义 算法实现 进阶问题 如何将单链表在指定区间内进行反转? 问题分析 这...
    craneyuan阅读 481评论 0 5
  • 单链表反转(java版本) 第一种方法第一步,判断节点是否为空,节点是否只有一个第二步,设置currentNode...
    syimo阅读 333评论 0 1
  • 单链表反转使用p、q、r三个指针配合工作,使得两个节点间的指向反向,同时用r记录剩下的链表。基本流程如下图所示: ...
    kMacro阅读 1,953评论 0 7