反转链表。
反转链表,常用的方法有就地反转,新建链表反转,栈反转,递归反转
就地反转
比如,现有链表1->2->3->4->5,首先,将1->null,接着向下一个节点2迭代,将2->1,接着向下一个节点3迭代,将3->2,也就是变成了3->2->1,依此类推。
如下:
public ListNode reserveListNode(ListNode head) {
ListNode prev=null;
ListNode curr=head;
while( curr!=null){
//先记住下一个节点
ListNode nextNode=curr.next;
//将当前节点的指针,指向"上一个节点",形成反转
curr.next=prev;
//存储当前节点,以便作为迭代后的"上一个节点"。
prev=curr;
//向下一个节点迭代
curr=nextNode;
}
}
栈反转
栈具有先进后出的特性。将链表的节点逐个push进栈里面,再pop出来,就完成了链表的反转