链表练习 --- 反转链表
eg: 将原链表 0 -> 1 -> 2 -> 3 -> 4 反转成为 4 -> 3 -> 2 -> 1 -> 0
/**
* @ClassName: ReverseLinklist
* @Description: TODO
* @Author: xiaomi.mzt@qq.com
* @Date: 2021/3/2 19:37
*/
public class ReverseLinklist {
public static void main(String[] args) {
Node node = new Node("0");
Node node1 = new Node("1");
Node node2 = new Node("2");
Node node3 = new Node("3");
Node node4 = new Node("4");
node.next = node1;
node1.next = node2;
node2.next = node3;
node3.next = node4;
System.out.println("----------打印原链表:");
System.out.println(node);
Node head = reverse(node);
System.out.println("----------反转链表后:");
System.out.println(head);
}
private static Node reverse(Node head) {
//新建一个指针指向头节点
Node p = head;
//用来保存新的next结点
Node newNext = null;
while (p != null) {
//先保存当前结点
Node node = p.next;
//更新next结点,设为newNext
p.next = newNext;
//下一个结点的next值就是当前p指向的结点
newNext = p;
//p指向原链表当前结点的下一个结点
p = node;
}
//最后newNext指向原链表最后一个结点,也就是反转链表的第一个结点
return newNext;
}
}
class Node {
String value;
Node next;
public Node(String value) {
this.value = value;
this.next = null;
}
@Override
public String toString() {
return "{" +
"value='" + value + '\'' +
", next=" + next +
'}';
}
}
输出
----------打印原链表:
{value='0', next={value='1', next={value='2', next={value='3', next={value='4', next=null}}}}}
----------反转链表后:
{value='4', next={value='3', next={value='2', next={value='1', next={value='0', next=null}}}}}
Process finished with exit code 0
钻石要琢磨

浙公网安备 33010602011771号