简单单链表 逆转操作

参考了这位博主的文章,很容易理解
https://blog.csdn.net/cangchen/article/details/45040259

image.png

核心代码
next = head->next;
head->next = prev;
prev = head;
head = next;


#include "stdio.h"
#include "stdlib.h"

typedef int ElementType;
typedef struct Node
{ /*结点类型定义*/
    ElementType data;
    struct Node *next;
} Node, *LinkList; /*LinkList为结构指针类型*/
// void reverseList(LinkList head);
void printListNode(LinkList L);
LinkList reverseList(LinkList L)
{

    LinkList prev = NULL;
    LinkList head = L->next;
    LinkList next;

    while (head != NULL)
    {
        next = head->next;
        head->next = prev;
        prev = head;
        head = next;
    }

    LinkList node = (LinkList)malloc(sizeof(struct Node)); //给链表prev添加头指针
    node->next = prev;

    return node;
}
void printListNode(LinkList L)
{
    LinkList tmp = L->next;

    while (tmp)
    {
        printf("%d", tmp->data);
        tmp = tmp->next;
    }
    return;
}
LinkList initList()
{
    LinkList L;
    L = (LinkList)malloc(sizeof(struct Node));
    if (L == NULL)
    {
        printf("申请空间失败");
    }
    L->next = NULL;
    return L;
}

int main()
{

    int i = 0;
    LinkList L = initList();
    LinkList node;
    for (; i < 8; i++)
    {
        node = (LinkList)malloc(sizeof(struct Node));
        node->data = i;
        node->next = L->next;
        L->next = node;
    }
    printf("原单链表:");
    printListNode(L);
    printf("\n");
    LinkList L2 = reverseList(L);
    printf("逆反单链表:");
    printListNode(L2);
    return 0;
}

你可能感兴趣的:(简单单链表 逆转操作)