反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?
/**
* 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* h=NULL,*j;
j=head;
while(head){ // 循环判断条件是head
j=j->next; // 原有链表的动态指针,防止后段的链表丢失,先做移动
head->next=h; // 旧节点连接上新的链表的末尾
h=head; // 新链表的指针移动到新连接上的节点
head=j; // 新链表的新节点的指针指向旧链表的下一个准备连接的节点。最后才更新head,才保证最后一个节点反转了
}
return h; // h指向原链表的最后一个节点
}
};