反转链表的java实现

一、问题描述

现在给你一个单链表的头节点 head ,请你反转链表,并返回反转后的链表

示意图:

单链表的定义:

/**
 * 下面给出的是单链表的定义
 * 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; }
 * }
 */

二、解决思路

单链表的反转实现是十分常见的一道面试题,是我们都必须要掌握的。我们的解决思路如下:
假设现在的链表是1→2→3→null,我们需要返回的链表是3→2→1→null
根据单链表的定义我们可以知道,每个节点都只保存了它下一个节点的指针next,而没有保存它前一个节点的指针,当链表进行反转后,每个节点的下一个节点就变成了它原来的前一个节点,比如原先是1→2→3→null,反转后就变成了3→2→1→null,因此我们需要事先保存每个节点的前一个节点,随后在我们遍历链表的过程中,需要将当前节点的next 指针改为指向它的前一个节点,当然,在我们修改next指针之前还必须先保存它的后一个节点,不然修改next指针后它的后一个节点就访问不到了,最后返回新的头节点。

三、代码实现

   
public ListNode reverseList(ListNode head) {
      ListNode prev = null; //表示当前节点的前一个节点,初始值为null
      ListNode temp = head; //表示当前节点,初始值为head
      ListNode next; //表示当前节点的下一个节点
      while(temp != null){
          //先提前保存当前节点的下一个节点
           next = temp.next;
          //将当前节点的next指针指向当前节点的前一个节点
          temp.next = prev;
          //更新prev,即将temp赋值给prev
          prev = temp;
          //更新temp,即将next赋值给temp
          temp = next;
      }
      return prev; //退出循环时temp为null,那么temp的前一个节点prev即为新的头结点
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值