手写链表反转
本章节介绍两种链表反转的方法。
链表反转
题目描述:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
- 虚拟头结点法。在链表反转时,建立虚拟头结点主要有以下原因:防止单链表为空:当链表为空的时候,带头结点的头指针就指向头结点。如果单链表没有带头结点,那么它的头指针就为NULL。这样可以避免空指针异常。方便操作:虚拟头节点是为了方便单链表的特殊操作,如插入在表头或者删除第一个结点。这样就保持了单链表操作的统一。例如,当我们需要对链表进行反转操作时,可以通过虚拟头节点简化操作过程。
- 直接对链表操作。
public static ListNode reverseListByDummyNotCreate(ListNode head) {
ListNode dummyNode=new ListNode(-1);
ListNode cur=head;
while (cur!=null){
ListNode next=cur.next;
cur.next=dummyNode.next;
dummyNode.next=cur;
cur=next;
}
return dummyNode.next;
}
public static ListNode reverseListSimple(ListNode head) {
ListNode pre=null;
ListNode cur=head;
while (cur!=null){
ListNode next=cur.next;
cur.next=pre;
pre=cur;
cur=next;
}
return pre;
}