package com.wmp.test2;
import java.util.ArrayList;
import java.util.List;
/**
* 链表反转
*/
public class ReverseLink {
public static void main(String[] args) {
Node n1 = new Node(1);
Node n2 = new Node(2);
Node n3 = new Node(3);
Node n4 = new Node(4);
Node n5 = new Node(5);
n1.next = n2;
n2.next = n3;
n3.next = n4;
n4.next = n5;
n1.print();
Node n = reverse2(n1);
n.print();
}
/**
* 调整节点指针实现
* @param n
* @return
*/
public static Node reverse1(Node n) {
if (n == null) return null;
Node last = null;
Node cur = n;
Node next = n.next;
while(cur != null) {
cur.next = last;
last = cur;
cur = next;
if (next != null) {
next = next.next;
}
}
return last;
}
/**
* 借助数组实现
* @param n
* @return
*/
public static Node reverse2(Node n) {
if (n == null || n.next == null) return n;
List<Node> list = new ArrayList<>();
while(n != null) {
list.add(n);
n = n.next;
}
int tail = list.size() - 1;
for (int i = tail; i > 0; i--) {
list.get(i).next = list.get(i - 1);
}
//避免循环引用
list.get(0).next = null;
return list.get(tail);
}
private static final class Node {
public int value;
public Node next;
public Node(int i) {
this.value = i;
}
public void print() {
Node n = this;
while(n != null) {
System.out.println(n.value);
n = n.next;
}
}
}
}
链表反转实现
最新推荐文章于 2023-04-08 19:56:12 发布