206 反转链表

法1思路

只需要改变链表中next的指向,就能反转链表
在这里插入图片描述
首先定义一个pre指针,初始化为null,再定义一个r指针,初始化为null。
然后就要开始反转了,首先要把 head->next 结点用r指针保存一下,也就是保存一下这个结点。然后改变当前结点也就是head节点中next的指向,最后移动指针,head指向下一个节点,pre指向下一个结点的前结点。

class Solution {
    public ListNode reverseList(ListNode head) {
      ListNode pre=null;
      ListNode r=null;
      while(head!=null){
        r=head.next;
        head.next=pre;
        pre=head;
        head=r;
      }
      return pre;
    }
}

法2思路

使用虚拟结点,头插法,每次将下一个结点插入到虚拟结点之后。

class Solution {
    public ListNode reverseList(ListNode head) {
      ListNode dummy=new ListNode(-1,null);
      ListNode cur=head;
      ListNode temp=null;
      while(cur!=null){
            temp=cur.next;
            cur.next=dummy.next;
            dummy.next=cur;
            cur=temp;
      }
      return dummy.next;
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值