反转链表
题目
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
思路:
使用三个指针,分别标记上一次反转后的表头,这一次需要反转的节点和下一次需要反转的节点
过程中相当于将一个链表拆成了两个
以示例来说就是
第一次反转后成为 1 和 2345
第二次反转后成为 21 和 345
第三次反转后成为 321 和 45
等等
代码如下:
struct ListNode* reverseList(struct ListNode* head){
struct ListNode *next;
struct ListNode *curr = head;
struct ListNode *pre = NULL;
if(head == NULL)
return head;
while(curr) {
next = curr -> next;
curr -> next = pre;
pre = curr;
curr = next;
}
return pre;
}