单链表反转,提供空间复杂度O(1),时间复杂度O(n),
递归实现:
public static void testReverseLinkNode(){
LinkNode E = new LinkNode("E", null);
LinkNode D = new LinkNode("D", E);
LinkNode C = new LinkNode("C", D);
LinkNode B = new LinkNode("B", C);
LinkNode A = new LinkNode("A", B);
LinkNode result = reverseLinkNode(A, null);
System.out.println();
}
public static LinkNode reverseLinkNode(LinkNode node, LinkNode pre){
LinkNode next = node.next;
node.next = pre;
if(null != next){
return reverseLinkNode(next, node);
}else{
return node;
}
}
非递归实现:
public static LinkNode reverseLinkNode1(LinkNode node){
if(null == node){
return node;
}
LinkNode pre = null;
while(null != node){
LinkNode next = node.next;
node.next = pre;
if(null == next){
return node;
}
pre = node;
node = next;
}
return node;
}
本文介绍了一种在空间复杂度O(1)和时间复杂度O(n)下实现单链表反转的方法。提供了两种实现方式:递归实现与非递归实现。递归方法通过不断调用自身来反转链表节点指向;非递归方法则采用迭代的方式逐个反转节点。
296

被折叠的 条评论
为什么被折叠?



