Leetcode 单链表反转

单链表反转问题有很多好的处理方法,做题的时候看到一种很好的解决思路。

新建三个指针分别为 pre、cur、next 。

pre作为新建链表的头指针,cur作为当前待转移元素的指针,next作为除待转移元素以为,剩余元素的头指针

三个指针设置的很合理,分别对应有效的位置,避免丢掉链表的位置。其中next是在cur不为NULL这一条件成立才会创建。

如果采用循环外创建,循环内使用 next = next -> next  这样的方式更新指针。此时next达到NULL时,cur仍然满足循环条件,此时会造成 next指针为 NULL  时没有 next指针域造成的执行错误。

代码如下:

class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        if (head == NULL || head->next == NULL)
            return head;
        ListNode* pre = NULL; // 作为转换后的链表的头指针
        ListNode* cur = head; // 待转换的元素

        while(cur != NULL) {
            ListNode* next = cur->next; // 创建next指针
            cur->next = pre;            // 移动数,将新链表接到待移数的指针
            pre = cur;                  // 新链表头指针右移
            cur = next;                 // 待换数指针右移
        }
        return pre;
    }
};

 

 

 

你可能感兴趣的:(数据结构和算法,链表,单链表,leetcode,数据结构,指针)