206. 反转链表
1建立虚拟头结点辅助反转
- 创建虚拟节点ans,next指向null
- 定义当前节点cur,初始化为头节点head
- 当cur!=null时循环操作
- 保存cur下一个节点next
- 将cur的next指向虚拟节点ans的下一个节点(形成反转)
- cur移动到next
- 返回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直接操作链表实现反转
- 定义两个指针pre和curr,prev初始化为null,curr初始化为头节点head
- 当curr!=null时循环操作
- 保存curr的下一个节点next
- 将curr的next指向prev
- prev移动到curr
- curr移动到next
- 循环结束,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;
}