4.链表反转

链表反转

链表的结构:

  public class ListNode {
      int val;
      ListNode next;
      ListNode() {}
      ListNode(int val) { this.val = val; }
      ListNode(int val, ListNode next) { this.val = val; this.next = next; }
  }

反转函数:

class Solution {
    // 定义ListNode类,通常是这样的:
    // public class ListNode {
    //     int val;
    //     ListNode next;
    //     ListNode(int x) { val = x; }
    // }

    // reverseList方法用于反转一个链表
    public ListNode reverseList(ListNode head) {
        // pre用于保存当前节点的前一个节点
        ListNode pre = null;
        // next用于保存当前节点的下一个节点
        ListNode next = null;

        // 遍历链表,直到到达链表的末尾(head为null)
        while (head != null) {
            // 保存当前节点的下一个节点,因为在反转过程中会改变当前节点的next指针
            next = head.next;
            // 将当前节点的next指针指向前一个节点,完成当前节点的反转
            head.next = pre;
            // 移动pre指针到当前节点,更新前一个节点为当前节点
            pre = head;
            // 移动head指针到下一个节点,即原链表中的下一个节点
            head = next;
        }

        // 当链表遍历完成后,pre指针指向原链表的最后一个节点,即新链表的第一个节点
        return pre;
    }
}

具体步骤

Step1:

在这里插入图片描述

Step2:

在这里插入图片描述

Step3…

重复上述步骤直至head=null

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值