题目描述:
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
示例:
输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL
思路分析:
就是最简单的方法,遍历链表中的每个节点,然后使用头插法插入新的链表中,最后返回新的链表
重点代码(也就是头插法变一下形):
head3 = head->next; //先将需要反转的链表x从下一个节点保存起来y
head ->next = head1; //将该节点下一个节点变成新的链表z
head1= head; //z重新取代新链表的位置
head = head3; //将保存的y重新赋值给需要反转的链表以供下次循环
代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode *head1 = NULL;
ListNode *head3 = NULL;
while(head)
{
head3 = head->next;
head ->next = head1;
head1= head;
head = head3;
}
return head1;
}
};