思路就是利用一个空的结点,使第一个结点与第二个结点的链接断开,第一个结点链接这个空结点,以此类推。但在断开链接之前需要用一个临时的变量保存第一个结点所指的结点(temp=p->next;),防止找不到后续的结点。
1 typedef int ElemType; 2 typedef struct LNode *LinkList; 3 typedef struct LNode 4 { 5 ElemType data; 6 LinkList next; 7 }LNode; 8 LinkList ReverseList (LinkList L) 9 {10 LinkList temp; //定义临时变量保存结点11 LinkList p=L; 12 LinkList save=NULL; //保存13 LinkList head;14 head->next = p;15 while(p)16 {17 temp = p->next; //保存18 p->next = save; //指向前一个结点19 save = p; //前进到旧链表的第一个结点20 p = temp; //继续进行下一次翻转21 }22 head->next = save;23 return head;24 }