//无头结点
List Reverse( List L ){
if(!L || !(L->Next)) return L; //如果是空链表或者只有一个结点,那么就不用反转
List now = L, pre = NULL; //pre是当前结点的上一个,第一个结点的pre为NULL,这样反转后最后一个结点的Next就为NULL,刚刚好呀
while(now){ //遍历链表
List temp = now->Next;
now->Next = pre;
pre = now;
now = temp;
}
L = pre; //上述循环后的pre是原链表的最后一个结点,那么就是新链表的第一个结点
return L;
}
//有头结点
List Reverse( List L ){
List first = L->Next; //把L->Next当成是无头节点的第一个结点,其他代码就和上面类似了
if(!first || !(first->Next)) return L;
List now = first, pre = NULL;
while(now){
List temp = now->Next;
now->Next = pre;
pre = now;
now = temp;
}
L->Next = pre;
return L;
}
注意点分析:
- 空指针的判断,不要对空指针进行操作
- 最后一个结点的Next要设为NULL,否则输出链表的时候很可能会超时(跳不出循环)