list.h
typedef struct Node
{
int data;
struct Node* next;
}ListNode,*List;
void printList(List list);
List reverseList(List list);
list.cpp
#include <iostream>
using namespace std;
#include "list.h"
void main()
{
ListNode* head;
head = (ListNode*)malloc(sizeof(ListNode));
head->next = NULL;
head->data = -1;
ListNode *p,*q;
p = head;
for (int i=0;i<10;++i)
{
q = (ListNode *)malloc(sizeof(ListNode));
q->data = i;
q->next = NULL;
p->next = q;
p = q;
}
printList(head);
head = reverseList(head);
printList(head);
}
void printList(List list)
{
ListNode* p = list->next;
while(p!=NULL)
{
cout<< p->data << " ";
p = p->next;
}
cout << endl;
}
List reverseList(List list)
{
if (list->next==NULL||list->next->next==NULL)
return list;
ListNode *p = list->next;
ListNode *q = list->next->next;
ListNode *t = NULL;
while(q!=NULL)
{
t = q->next;
q->next = p;
p = q;
q = t;
}
//此时p指向原来的最后一个节点
list->next->next = NULL;//list还是头节点,list->next是原来的第一个节点(即倒转后的尾节点)
list->next = p;
return list;
}