【无标题】Leetcode力扣经典题目翻转链表,链表内容再强化

链表的基础定义还是比较简单的,只需定义对应链表节点的节点值,链表节点的next指针即可构建出链表数据结构,在本文中,会带大家了解一下力扣经典链表题目:翻转链表。

首先给出我们链表的数据结构定义:

  struct ListNode {
      int val;
      ListNode *next;
      ListNode() : val(0), next(nullptr) {}
     ListNode(int x) : val(x), next(nullptr) {}
     ListNode(int x, ListNode *next) : val(x), next(next) {}
  };
 

要进行链表的翻转,其实就是头指针从第一个节点开始遍历至最后一个节点,将其顺序改成从最后一个节点遍历回第一个节点,如下图:

不难看出,我们如果能够改变next指针的指向,即可完成链表的一个翻转操作。这时,我们可以考虑使用双指针的操作,一个指针在前,一个指针在后,引入中间变量指针tmp,可以轻松地实现链表的翻转,具体代码如下:

class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        if (head == nullptr) {                     //判断链表是否为空链表
            return nullptr;
        }
        ListNode* front = head;                   //作为前方的指针
        ListNode* hind = nullptr;                 //位于后方的指针(!!!注意,这个时候需要将其置为空指针,不能指向head,不然头节点将会被遗漏)
        ListNode* tmp = head;                     //中间变量节点,用于接收前方指针移位前的位置,将其指向后方的hind指针就可以实现翻转了
        while (front != nullptr) {
            tmp = front;                          //步骤不能乱,front必须在hind前面操作,不然会造成指针丢失
            front = front->next;
            tmp->next = hind;
            hind = tmp;
        }
        head = hind;
        return head;
    }
};

本篇文章分享到此,欢迎各位留言交流!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值