关闭

实现单链表的反转

233人阅读 评论(0) 收藏 举报
分类:

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


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






0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:145686次
    • 积分:2799
    • 等级:
    • 排名:第13224名
    • 原创:140篇
    • 转载:19篇
    • 译文:2篇
    • 评论:15条
    文章分类