算法通关村第二关——终于学会链表反转|青铜挑战

206. 反转链表

1建立虚拟头结点辅助反转

  1. 创建虚拟节点ans,next指向null
  2. 定义当前节点cur,初始化为头节点head
  3. 当cur!=null时循环操作
    1. 保存cur下一个节点next
    2. 将cur的next指向虚拟节点ans的下一个节点(形成反转)
    3. cur移动到next
  4. 返回ans.next
public static ListNode reverseListByDummyNotCreate(ListNode head){
    ListNode ans=new ListNode(-1);
    ListNode cur=head;
    while(cur!=null){
        ListNode next=cur.next;
        cur.next=ans.next;
        ans.next=cur;
        cur=next;
    }
    return ans.next;
}

2直接操作链表实现反转

  1. 定义两个指针pre和curr,prev初始化为null,curr初始化为头节点head
  2. 当curr!=null时循环操作
    1. 保存curr的下一个节点next
    2. 将curr的next指向prev
    3. prev移动到curr
    4. curr移动到next
  3. 循环结束,pre时新的头节点,返回prev
public ListNode reverseListSimple(ListNode head){
    ListNode prev=null;
    ListNode curr=head;
    while(curr!=null){
        ListNode next=curr.next;
        curr.next=prev;
        prev=curr;
        curr=next;
    }
    return prev;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值