//
// main.cpp
// 链表的反向
//
// Created by 柯木超 on 2018/11/28.
// Copyright © 2018 柯木超. All rights reserved.
//
#include <iostream>
typedef struct Node{
int data;
struct Node *next;
}linkNode, *link;
link createNode() {
// c++ 要先声明,然后再赋值, T记录头节点,M 记录当前移动节点,P是当前输入节点
link T,P,M;
// 1、给头节点开辟新的内存空间
T = (link)(malloc(sizeof(linkNode)));
M = T;
for (int a=0;a<10;a++) {
P = (link)(malloc(sizeof(linkNode)));
P->data = a;
P->next = NULL;
M->next = P;
M = P; //M记录当前移动节点
}
M->next = NULL; // 表尾后继置空
return T;
}
void printNode(link L){
while (L->next != NULL) {
L = L->next;
printf("%d", L->data);
}
printf("\n");
}
link reverseNode(link L){
link p,q;
p = L->next; //作为一个实际操作的节点
L->next = NULL;
while(p){
// p不断的往下移动,拿到每一个节点,赋值给q,然后插入到L的头节点
q = p; // 把当前节点取出来
p = p -> next; //p下移动
//把q插入到H的头节点中,这一步会把p链表断掉,所以在上一步就要把p指向 p->next
q->next = L->next;
L->next = q;
}
printf("\n");
return L;
}
int main(int argc, const char * argv[]) {
// insert code here...
std::cout << "Hello, World!\n";
link L = createNode();
printNode(L);
reverseNode(L);
printNode(L);
return 0;
}