反转链表
反转链表,常用的方法有迭代,栈反转,递归反转。
迭代
比如,现有链表1->2->3->4->5,
首先,从第一个节点开始,反转,将1->null,
接着向下一个节点2,迭代,反转,将2->1,
接着向下一个节点3,迭代,反转,将3->2,也就是变成了3->2->1,依此类推。
关键的几点:
1.找到当前节点、上一个节点;
2.反转。将当前节点指向上一个节点,形成反转;
3.迭代。向后迭代,找到新的"当前节点"、"上一个节点"。
如下:
public ListNode reserveListNode(ListNode head) {
//上一个节点
ListNode prev=null;
//当前节点
ListNode curr=head;
//当前节点不为null,就循环
while( curr!=null) {
//先记住下一个节点
ListNode nextNode= curr.next;
//反转。将当前节点指向上一个节点,形成反转
curr.next= prev;
//向后迭代。
//迭代之后,新的上一个节点 pre,就是之前的"当前节点" curr
//迭代之后,新的当前节点 curr,就是之前的"下一个节点" nextNode
prev= curr;
curr= nextNode;
}
//最后prev会变成反转后的头节点,返回prev
return prev;
}