2、单链表的反转

来源:互联网 发布:知乎 卖水果平台 编辑:程序博客网 时间:2024/05/16 14:47

分析:

    每次都将原第一个结点之后的那个结点放在L后面,下图是原始的单链表。单链表反转示例图片

  为了反转这个单链表,我们先让头结点的next域指向结点2,再让结点1的next域指向结点3,最后将结点2的next域指向结点1,就完成了第一次交换,顺序就变成了Head-结点2-结点1-结点3-结点4-NULL,然后进行相同的交换将结点3移动到结点2的前面,然后再将结点4移动到结点3的前面就完成了反转。



#include<iostream>

#include<cstdlib>
const int MaxSize = 101;
using namespace std;


typedef struct ListNode{
    int data;
    struct ListNode *next;
}ListNode;


void ListNodeReserve(ListNode *L)
{
    ListNode *temp;
    ListNode *p;
    temp = L->next;
    while(temp->next!= NULL)
    {
        p = temp->next;
        temp->next = p->next;
        p->next = L->next;
        L->next = p;
    }
}


void Print(ListNode *L)
{
    ListNode *p;
    p = L->next;
    while(p != NULL)
    {
        cout<<p->data<<endl;
        p = p->next;
    }
}


int main()
{
    int num;
    ListNode *A;
    ListNode *r;
    ListNode *s;
    A = (ListNode*)malloc(sizeof(ListNode));
    r = A;
    while(cin>>num)
    {
        s = (ListNode*)malloc(sizeof(ListNode));
        s->data = num;
        r->next= s;
        r = r->next;
    }
    r->next = NULL;
    ListNodeReserve(A);
    Print(A);
    return 0;
}
0 0