题目描述
分别实现反转单向链表和反转双向链表的函数。
反转单链表
public static class Node {
private int value;
private Node next;
public Node(int value) {
this.value = value;
}
}
/**
* 反转单向链表
* 思路: 将链表中的元素一个个从链表中断开,修改指针指向前一个元素对应的链表结构
*
* @param head
* @return
*/
public static Node reverseList(Node head) {
Node current = null;
Node prev = null;
while (head != null) {
//取出第一个元素对应的链表
current = head;
//移动到下一个节点
head = head.next;
//指向前一个链表
current.next = prev;
//将结果赋值给prev
prev = current;
}
return prev;
}
反转双向链表
public static class DoubleNode {
public int value;
public DoubleNode prev;
public DoubleNode next;
public DoubleNode(int value) {
this.value = value;
}
}
public static DoubleNode reverserList(DoubleNode head) {
DoubleNode current;
DoubleNode prev = null;
while (head != null) {
//同样,先取出第一个节点
current = head;
//移动到下一个节点
head = head.next;
//修改current对应指针指向
current.next = prev;
current.prev = head;
//赋值给prev
prev = current;
}
return prev;
}