实验1:单向链表就地转置

  实验1:单向链表就地转置:

老师说随便语言,所以用的是c和c++混用方便一些。

一:实验要求:

1.新建单链表
2.依次输出单链表的值
3.就地反转
4.输出反转的链表的值
5.摧毁单链表

二:实验代码:

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using std::cin;
using std::cout;
using std::endl;

struct Link
{
    Link* next;
    int number;
};

void InitLink(Link* h1) {//头结点没有值
    int n;
    int number;
    cout<<"请输入您要创建链表的元素个数"<<endl;
    cin >> n;
    cout<<"请输入您要创建的链表,并且每一个元素请用空格空出"<<endl;

    for (int i = 0; i < n; i++) {
        Link* h2 = (Link*)malloc(sizeof(Link));
        cin >> number;
        h2->number = number;
        h2->next = NULL;
        h1->next = h2;
        h1 = h1->next;
    }
}

void  ReverseLink(Link* h) {
    cout << "下面是转置后的结果:"<<endl;

    Link* h0 = h->next;

    Link* cu=NULL, * pr = NULL;
    while (h0 != NULL) {
        cu = h0;
        h0 = h0->next;
        cu->next = pr;
        pr = cu;
    }

    h->next = cu;
    cout << "下面是转置后的结果:"<<endl;
}

void showLink(Link* h) {
    while (h->next!=NULL) {
        cout << h->next->number<<" ";
        h = h->next;
    }
    cout<<endl;
}

void destoryLink(Link* h) {
    Link* str = h;
    while (str!=NULL) {
        Link* temp = str->next;
        free(str);
        str = temp;
    }
    h = NULL;
    cout << "您已清除"<<endl;
}

int main() {
    int ck;
    int n;
    Link* head = (Link*)malloc(sizeof(Link));
    head->next = NULL;

    InitLink(head);
    showLink(head);
    ReverseLink(head);
    showLink(head);
    destoryLink(head);
    return 0;
}

三:结果:

原文地址:https://www.cnblogs.com/instead-everyone/p/13830860.html