题解 | #反转链表#
关于反转链表的题型解析
每日刷题个人总结:反转链表作为oj中最基础的题型,可以使用的方法有很多,笔者暂且只想出以下两种方案以供参考
1.利用栈的先进后出特性
代码如下:
public ListNode ReverseList(ListNode head) {
Stack<ListNode> stack=new Stack<>();
while (head!=null){
stack.push(head);
head=head.next;
}
if (stack.isEmpty()){
return null;
}
ListNode node=stack.pop();
ListNode dump=node;//头结点
while (!stack.isEmpty()){
ListNode tempNode=stack.pop();
node.next=tempNode;
node=node.next;
}
node.next=null;
return dump;
}
2.利用递归
代码如下:
public ListNode ReverseList(ListNode head) {
if (head.next==null||head==null){
return head;
}
ListNode al=head.next;
ListNode SERVER=ReverseList(al);
al.next=head;
head.next=null;
return SERVER;
}
3.利用虚拟节点
ListNode pre=null;
ListNode cur=head;
while (cur!=null){
ListNode CurNext=cur.next;
cur.next=pre;
pre=cur;
cur=CurNext;
}
return pre;
}
如上