链表翻转:
解法1:非递归形式,时间复杂度O(n),就地翻转时,会失去很多信息,因此需要保存前驱节点 ,后继节点的信息。
解法2:递归形式。因为链表翻转是将最后一个元素放到第一个,第一个放到最后,遍历时由只能从前向后,这符合栈后进先出的特点,考虑的使用栈会增加空间的开销,因为可以使用具有后进先出特性的递归。
class Solution{
public ListNode ReverseListNode(ListNode head){
ListNode PreListNode=new ListNode(0);
PreListNode.next=null;
ListNode NextListNode=null;
while(head!=null){
NextListNode=head.next;
head.next=PreListNode.next;
PreListNode.next=head;
head=NextListNode;
}
return PreListNode.next;
}
public ListNode ReverseListNode2(ListNode node){
if(node==null || node.next==null)
return node;
else{
ListNode head=ReverseListNode2(node.next);
node.next.next=node;
node.next=null;
return head;
}
}
}