反转链表
反转链表是面试中经常碰到的手撕算法题,通常要求在一次遍历后,得到反转之后的链表,下面通过3副图片和具体实现的代码,来详细地介绍,如何一次遍历反转链表。
第一步:新建dummy节点,指向链表的头部,这个节点的作用就是一直指向链表的头节点,最终返回链表的时候直接返回dummy.next就可以了。
第二步: 通过while循环,不断向后移动链表的头节点listNode,并把listNode的下一个节点移动到链表的头部,来形成反转链表,直到listNode.next == null 为止,就形成了反转之后的链表
移动过程1:
移动过程2:
继续循环遍历,直到listNode移动到了最后,也就是listNode.next == null,返回dummy.next
代码实现:
public class Solution{
public static ListNode reverseListNode(ListNode listNode) {
if (listNode == null) return null;
ListNode dummy = new ListNode(-1);
dummy.next = listNode;
while (listNode.next != null) {
ListNode temp = listNode.next;
listNode.next = listNode.next.next;
temp.next = dummy.next;
dummy.next = temp;
}
return dummy.next;
}
}