Leetcode链表easy | 206. 反转链表

反转一个单链表。

示例:

输入: 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指向原链表的最后一个节点
    }
};

你可能感兴趣的:(Leetcode链表easy | 206. 反转链表)