資料結構實驗之連結串列三:連結串列的逆置

HowieLee59發表於2019-03-10

Problem Description

輸入多個整數,以-1作為結束標誌,順序建立一個帶頭結點的單連結串列,之後對該單連結串列的資料進行逆置,並輸出逆置後的單連結串列資料。

Input

輸入多個整數,以-1作為結束標誌。

Output

輸出逆置後的單連結串列資料。

Sample Input

12 56 4 6 55 15 33 62 -1

Sample Output

62 33 15 55 6 4 56 12

Hint

不得使用陣列。

 

#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;

typedef struct Node{
    int data;
    struct Node *next;
}node;

void creat(node * &head){
    node *p,*tail;
    head = new Node;
    head->next = NULL;
    tail = head;
    while(1){
        p = new Node;
        scanf("%d",&p->data);
        if(p->data == -1){
            break;
        }
        p->next = NULL;
        tail->next = p;
        tail = p;
    }
}

void reverse(node * &head){
    node *p,*q;
    p = head->next;
    head->next = NULL;
    q = p->next;
    while(p){
        p->next = head->next;
        head->next = p;
        p = q;
        if(q)
            q = q->next;
    }
}

void show(node * &head){
    node *cur;
    cur = head->next;
    while(cur){
        if(cur->next == NULL){
            printf("%d\n",cur->data);
        }else{
            printf("%d ",cur->data);
        }
        cur = cur->next;
    }
}

int main(){
    node *head;
    head = new Node;
    creat(head);
    reverse(head);
    show(head);
    return 0;
}

 

相關文章