实现单链表的反转

原创 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;
}






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

相关文章推荐

List-LinkedList 单链表就地反转

  • 2012年05月09日 10:16
  • 41KB
  • 下载

单链表反转的两种实现(Java)

递归法 遍历法 LinkedList的反转递归法经历了很多面试,面试官最爱考察的算法无非是斐波那契数列和单链表反转,尽管是这些都是基础知识,然而我对单链表反转有更多的想法。 递归法是我早期最爱在面试...

用两种递归思路与循环实现单链表的反转

typedef struct ListNode{ int data; struct ListNode *next; }ListNode; //递归一 ListNode *ReverseList ...
  • Enter_
  • Enter_
  • 2014年08月05日 15:50
  • 1301

Java实现单链表反转

本文主要介绍单链表反转的两种方法,记录如下: 1. package com.leetcode; public class ListReverse { public static void m...

c语言实现单链表的操作:创建,删除,插入,反转, 排序等

最近学了数据结构的单链表基本操作:创建,删除,插入,反转,排序等.         如有不当或错误之处,欢迎指正,不胜感激!   #include #include #include i...
  • wahack
  • wahack
  • 2011年10月29日 14:45
  • 720

单链表反转C语言实现

单链表反转,面试常见题目: #include #include #include #define ERROR -1 #define OK 1 typedef int ElemType; t...

单链表反转python实现

单链表的反转可以使用循环,也可以使用递归的方式 1.循环反转单链表 循环的方法中,使用pre指向前一个结点,cur指向当前结点,每次把cur->next指向pre即可。      代码: ...

单链表反序(反转)C++实现

问题描述就是给一个链表,求出反转后的链表,比如1 2 3 4 5反转后为5 4 3 2 1. 链表的基础定义及实现参考博文:http://blog.csdn.net/dawn_after_dark/...

单链表反转python实现

http://blog.csdn.net/u011608357/article/details/36933337 单链表的反转可以使用循环,也可以使用递归的方式 1.循环反...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:实现单链表的反转
举报原因:
原因补充:

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