实现单链表的反转

原创 2016年08月30日 14:04:45

单链表的反转实现很常见:


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


#define NUM 9
typedef struct LNode
{
    int     data;
    struct LNode    *next;
}LNode, *LinkedList;


LNode slinklist = {0, NULL};

int initLinklist()
{
    int i = 0;
    
    for (i = 0; i < NUM; i ++)
    {
        LNode *tmp = malloc(sizeof(struct LNode)); 

        if (tmp == NULL)
            break;
        
        tmp->data = i;
        tmp->next = slinklist.next;

        slinklist.next = tmp;
    }
    
    LNode *ltmp = (slinklist.next);

    for (i = 0; i<NUM; i++)
    {
        printf("List i:%d, data:%d\n", i, ltmp->data);
        ltmp = ltmp->next;
    }

    return 0;
}

LinkedList ReverseSinglyLinkedList(LinkedList list)
{
    LNode   *tmp = NULL;
    LNode   *p = NULL;
 
    if (list == NULL)
    {
        return NULL;
    }
    tmp = list->next;
    while (tmp->next != NULL)
    {
        p = tmp->next;
        tmp->next = p->next;
        p->next = list->next;
        list->next = p;
    }
    return list;
}

int revertlist()
{
    LNode *Newlist= malloc(sizeof(struct LNode)); 
    int i = 0;
    
    if (Newlist == NULL)
        return -1;

    Newlist->data = 0;
    Newlist->next = NULL;

    LNode* tmp = slinklist.next;
    LNode* tmpnew = NULL;

    while(tmp != NULL)
    {
        tmpnew = Newlist->next;
        Newlist->next = tmp;
        tmp = tmp->next;
        Newlist->next->next = tmpnew;
    }

    
    LNode *ltmp = (Newlist->next);

    for (i = 0; i<NUM; i++)
    {
        printf("reverse i:%d, data:%d\n", i, ltmp->data);
        ltmp = ltmp->next;
    }

    
    return 0;
}


int main()
{
    initLinklist();

    revertlist();
    return 0;
}






版权声明:原创文章,转载请注明出处。

[算法]实现单链表的反转

实现链表的反转解题思路: 为了正确反转一个链表,需要调整指针的指向。举例说明,例如i,m,n是三个相邻的结点,假设经过若干步操作,已经把结点i之前的指针调整完毕,这些结点的next指针都指向前面一...
  • CodeEmperor
  • CodeEmperor
  • 2016年05月06日 18:32
  • 1981

单向链表反转(倒置)问题

今天遇到单向链表的反转的问题,于是静下心来好好想了一番。 解题思路如下图:假设当前创建好的链表如下:首先让头节点与第一个元素节点断开,但是要注意在断开之前需要用p指针指向第一个元素节点来保存第一个元...
  • blioo
  • blioo
  • 2017年03月14日 19:40
  • 7551

单链表实现反转的三种方法

单链表的操作是面试中经常会遇到的问题,今天总结一下反转的几种方案: 1 ,两两对换 2, 放入数组,倒置数组 3, 递归实现...
  • sinat_36899414
  • sinat_36899414
  • 2017年07月17日 20:03
  • 525

数据结构——反转单链表

最近看了《剑指offer》这本书,遇到了一个问题:反转链表 题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后的链表的头结点。 链表结点定义如下:struct ListNode { ...
  • u013271921
  • u013271921
  • 2015年06月05日 22:17
  • 3161

Java单链表基本操作(四)--单链表反转

单链表反转是笔试面试中考察最多的算法之一,是单链表里必须要熟练掌握的算法。/** * @author Gavenyeah * @date Start_Time:2016年4月1日 上午11:38...
  • y999666
  • y999666
  • 2016年04月01日 11:47
  • 702

反转单链表 (三种方法整理)

题目:反转单链表 输入一个链表,反转链表后,输出链表的所有元素。 据找工作的师兄说,反转单链表基本各个公司面试都会有,整理出一些写的比较好的code,供我等小白们学习。简洁,清晰,...
  • hyqsong
  • hyqsong
  • 2015年10月26日 21:15
  • 20584

PHP单链表翻转

  • u013474436
  • u013474436
  • 2016年03月01日 16:37
  • 12199

单链表反转(递归和非递归)

单链表反转有递归和非递归两种算法。 下面定义节点 typedef struct ListNode{ int value; ListNode* next; }ListNode; 在递归算法中的做法是...
  • KangRoger
  • KangRoger
  • 2014年03月02日 10:53
  • 20054

【面试题】-单链表反转

问题描述 将一个单链表反序输出,比如原单链表位1->2->3->4->NULL,反序输出后变为4->3->2->1->NULL 解题思路...
  • zwhlxl
  • zwhlxl
  • 2015年06月15日 22:29
  • 2012

单链表面试题——基础篇

1.比较顺序表和链表的优缺点,说说它们分别在什么场景下使用 总结: 1.若线性表需要频繁查找,很少进行插入、删除操作,宜采用顺序存储结构。若需要频繁插入和删除时,宜采用单链表结构; 2.当线性表...
  • sssssuuuuu666
  • sssssuuuuu666
  • 2017年06月13日 17:37
  • 476
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:实现单链表的反转
举报原因:
原因补充:

(最多只允许输入30个字)