链表 reverse
方式一,操作子节点
将子节点的next指向当前节点。这种处理需要对第一个节点做单独处理

方式二,操作当前节点
将当前节点指向他的parent节点,第一个节点无parent,用null表示,所有节点操作同一

测试代码
package java05.linklist;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class ReverseLinkList {
public static void main(String[] args) {
Node<Integer> head = new Node<>(1), t = head;
for (int i = 1; i < 10; i++) {
t.setNext(new Node<>(i + t.getData()));
t = t.getNext();
}
println(head);
println(head = reverse(head));
println(reverse2(head));
}
static void println(Node head) {
log.info("-------------------------------------------------------");
while (head != null) {
log.info("{}", head);
head = head.getNext();
}
}
static Node reverse(Node head) {
if (head == null || head.getNext() == null) {
return head;
}
Node current = head, next = current.getNext(), temp = null;
while (next != null) {
temp = next.getNext();
next.setNext(current);
current = next;
next = temp;
}
head.setNext(null);
return current;
}
static Node reverse2(Node head) {
if (head == null || head.getNext() == null) {
return head;
}
Node current = head, parent = null, temp = null;
while (current != null) {
temp = current.getNext();
current.setNext(parent);
parent = current;
current = temp;
}
return parent;
}
}
@Data
class Node<T> {
private T data;
private Node<T> next;
public Node(T data) {
this.data = data;
}
@Override
public String toString() {
return "Node{" +
"data=" + data +
'}';
}
}

浙公网安备 33010602011771号