一、图解![watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc2d2Y2R0aGo=,size_20,color_FFFFFF,t_70,g_se,x_16](https://i-blog.csdnimg.cn/blog_migrate/1dd3ad04f0bf36a1b2e7d8aa846f2d74.png)
二、完整代码(也是写在实现类里的方法)
//链表反转的问题 public void reverse() { if (size == 0 || size == 1) { return; } Node dummpyHead = new Node(); //虚拟头结点 //再创建一个p刚开始指向头节点head Node p = head; //然后从head开始往后遍历 for (int i = 0; i < size; i++) { //定义一个新的节点接收从head节点往后开始遍历的节点 Node n = new Node(p.data); //如果虚拟头结点的吓一跳为空则后面一个值还没添加呢 //直接令尾节点为n //否则的话就是遍历到第二个元素以后了 if (dummpyHead.next == null) { tail = n; } //当在虚拟头节点添加第一个元素是dummpyHead.next==null n.next = dummpyHead.next; dummpyHead.next = n; p = p.next; } head = dummpyHead.next; }