Leetcode.202题:反转链表

 

一、问题描述:

Reverse a singly linked list.

Example:

Input: 1->2->3->4->5->NULL
Output: 5->4->3->2->1->NULL

二、问题思考:

  • 方法一:三指针

遍历以cur->next为基准,

当cur->next为空退出循环,

最后链表处于如上图一样的状态,做收尾处理,

将cur->next指向pre,

head->next = NULL(head记录第一个pre指针所在的位置,将第一个pre与cur的指针删除掉),

随后以当前结点作为新的头结点,完成链表的反转,代码如下:

ListNode* reverseList(struct ListNode* head){
    
    if(head == NULL || head->next == NULL)
        return head;
    
    struct ListNode* pre,*cur,*next;
    
    pre = head;
    cur = head->next;
    
    while(cur->next){
        next = cur->next;
        cur->next = pre;
        pre = cur;
        cur = next;
    }
    cur->next = pre;
    head->next = NULL;
    head = cur;

    
    return head;
}
  • 方法二:双指针

类似于链表的头插法,不需要考虑边界情况

ListNode* ReverseList(ListNode* pHead) {
        if(!pHead || !(pHead->next)) return pHead;
        ListNode* pre = nullptr;
        ListNode* cur = nullptr;
        while(pHead!=nullptr){
            cur = pHead->next;
            pHead->next = pre;
            pre = pHead;
            pHead = cur;
        }
        return pre;
    }

猜你喜欢

转载自blog.csdn.net/qq_37348221/article/details/103254642
今日推荐