#include <iostream> typedef struct node { int data; struct node *next; }Node; Node *createList() { Node *head = new Node; head->data = 0; head->next = NULL; return head; } void showList(Node *head) { while (head->next != NULL) { head = head->next; std::cout << head->data << ' '; } } void insertNode(Node *head, int num) { Node *p = new Node; p->data = num; Node *q = head; while(q->next != NULL) q = q->next; q->next = p; p->next = NULL; } //非递归方式实现逆序,此处直接传进指向头结点的指针 Node *reverseList(Node *head) { Node *p, *q, *r1, *r2; //辅助指针 r1 = head; //带头结点的链表,保存头结点 r2 = head->next; p = r1->next; q = p->next; while (q->next != NULL) { p->next = head; head = p; p = q; q = q->next; } p->next = head; q->next = p; r1->next = q; r2->next = NULL; return r1; } //递归方式实现逆序,此处并没有把头结点指针传进来,返回的是指向首结点的指针,而非头结点 Node *reList(Node *p) { if(p->next==NULL) { return p; } else { Node *q, *h; q = p ->next; h = reList(q); q->next = p; p ->next = NULL; return h; } } int main() { Node *head1 = createList(); Node *head2 = new Node; //声明一个头结点 Node *p; insertNode(head1, 1); insertNode(head1, 2); insertNode(head1, 3); insertNode(head1, 4); insertNode(head1, 5); insertNode(head1, 6); insertNode(head1, 7); showList(head1); //注意头结点的存在,递归方法实现,传递head1->next p = reList(head1->next); //非递归方法实现,直接传递头结点指针 //reverseList(head1); std::cout << std::endl; head2 ->next = p; showList(head2); return 0; }