反转链表

反转链表

今天给大家讲一下反转链表
在这里插入图片描述
如图这样的效果
我们有两种方法来解决这个问题
第一种:
递归:
1.我们让head.next.next=head;head.next=null;
2.第一次2->1
3.第二次3->2->1

以此类推逻辑比较简单
上代码:

class Solution {
    public ListNode reverseList(ListNode head) {
     if(head==null||head.next==null){
         return head;
     }
     ListNode h=reverseList(head.next);
     head.next.next=head;
     head.next=null;
     return h;
    }
}

第二种:
我们新来一个头节点node采用头插法进行插入返回node.next;
假如我们创建一个node的值为-100
-100->1
-100->2->1

以此类推逻辑比较简单上代码:

class Solution {
    public ListNode reverseList(ListNode head) {
         if(head==null){
             return null;
         }
         ListNode root=new ListNode(100);
        while(head!=null){
           //如果是第一个节点
           if(root.next==null){
             root.next=head;
             head=head.next;
             root.next.next=null;
             //如果不是第一个节点
           }else{
                ListNode node=root.next;
                root.next=head;
                head=head.next;
                root.next.next=null;
               root.next.next=node;
            }
           
         }
         return root.next;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值