单链表的反转

爷,独闯天下 提交于 2020-02-17 06:51:46

参考来源>

自己的理解

         Node cur = head.next;
         Node cur_next = null;
         Node reverseHead = new Node(0);//全新的空节点,用于存放反转的节点
         while(cur != null){//cur不为空即为遍历结束
             cur_next = cur.next;
             cur.next = reverseHead.next;//这里的rhead.next会把ur.next给占用了,因此需要提前保留cur.next到cur_next
             reverseHead.next = cur;
             cur = cur_next;
             System.out.println(reverseHead.toString());
//             System.out.println();
         }
         head.next = reverseHead.next;

假设链表为 1>2>3>4
(1)不算头结点,把第一个节点设置为当前节点,即为cur,此时的cur的next 是指向原链表(2,3,4),需要把这个指向关系给断掉,就让cur的next指向一个新建q为null,这个时候第一个节点和q就组成了新的链表,cur.next是null,就不是原链表(2,3,4)了,这个时候再把第一个节点(cur)与q(null)替换成q,作为下一阶段的q
(2)我们在把第一个节点给拎出来的时候,还需要把cur.next用中间变量给保存下来,不然就无法进行下一阶段==》cur_next = cur.next
(3)此时可以发现,这个单链表的逆是反着来构建的,先建尾部,在以此倒推,第一个元素已经和q组成了链表的最尾部,并让我们设置为q,再把保存的cur_next变为cur,让剩下的234,继续上诉123步骤。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!