【数据结构复习】链表的倒置(头插法倒置)

#include 
using namespace std;
typedef int ElemType;
struct LNode{
    ElemType data;
    LNode *next;
};
LNode *head,*tail;

void init(){
    head = (LNode*)malloc(sizeof(LNode));
    head->next = NULL;
    tail = head;
}

void input_data(){
    int x;
    cin >> x;
    while (x!=-1){
        LNode *temp = (LNode*)malloc(sizeof(LNode));
        temp->data = x;
        temp->next = NULL;
        tail->next = temp;
        tail = temp;
        cin >> x;
    }
}

//关键函数
void _reverse(){
    LNode *p = head->next;
    head->next = NULL;
    while (p){
        LNode *temp = p->next;//记录下当前遍历到的这个节点的下一个
        p->next = head->next;//这个几点的下一个节点接在头结点后面的那个节点
        head->next = p;//头结点的后一个节点指向该节点,从而完成插入过程
        p = temp;
    }
}

void print(){
    LNode *temp = head->next;
    while (temp){
        cout<data<<" ";
        temp = temp->next;
    }
}

int main(){
    init();
    //freopen("D://rush.txt","r",stdin);
    input_data();
    _reverse();
    print();
    fclose(stdin);
    return 0;
}

  

你可能感兴趣的:(【数据结构复习】链表的倒置(头插法倒置))