LeetCode206 反转一个单链表

LeetCode206 反转一个单链表。

示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

算法: 遍历链表,更改当前Node->next为前一个Node的地址(更改前进行保存)。

/**
 * 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) {
        if(head==NULL || head->next==NULL) 
        {
            return head;
        } 
        ListNode* P1 = head;   //前1Node地址
        ListNode* P2 = head->next;  //当前Node地址
        head->next = NULL;
        while(P2)
        {
            ListNode* p2 = P2->next; 
            P2->next = P1; //当前Node的next指向前一指针
            P1 = P2;       //保存当前Node地址
            P2 = p2;       //下一次要出来的Node
        }       
        return P1;
    }
};

你可能感兴趣的:(算法)