题目来源:LeetCode
1. 题目描述
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
限制:
0 <= 节点个数 <= 5000
2. 思考
- 将当前节点的下一节点指向当前节点时,会丢失后续节点,例如将示例中的1->2反转为2->1时,2与3之间的连接也就会断开,此时就会丢失3以后的节点。所以最少需要3个节点变量,一个变量用于保存后续节点
- 考虑只有一个节点或链表为空
- 考虑只有两个节点
3. 代码
struct ListNode* reverseList(struct ListNode* head){
struct ListNode* prev = NULL;
struct ListNode* curr = head;
struct ListNode* last = curr==NULL?NULL:curr->next;
if(head == NULL) return NULL;
while(last!= NULL){
curr->next = prev;
prev = curr;
curr = last;
last = last->next;
}
curr->next = prev;
return curr;
}