单链表的反转
- 注意:
SingleLinkedList 是已经构建好的单链表类,默认有一个序号为0的头节点,还有一些单链表的增、删、查、改等最基础的操作实现。
Node是已经创建好的节点类,Node含有2个字段。一个是节点的序号num(在这个算法并没有用到,在测试时方便显示),另外一个是类型为Node的next字段,用来指向本节点的下一个节点。
由于SingleLinkedList和Node比较简单,代码就不具体展示了,主要看翻转链表的代码
代码实现:
private static void test03(SingleLinkedList linkedList) {
//如果当前链表为空,或者只有一个节点,无需反转,直接返回
if(linkedList.head.next == null || linkedList.head == null) {
return;
}
//定义一个临时的辅助指针,帮助遍历原来的链表
Node temp = linkedList.head.next;
Node next = null; //指向当前节点temp的下一个节点
//遍历原来的链表,每遍历一个节点,就将其取出,并放在新的链表reverseNode的最前端
Node reverseNode = new Node(0);
while (temp != null) {
next = temp.next; //先暂时保存当前节点的下一个节点,因为后面需要使用
temp.next = reverseNode.next; //将temp的下一个节点指向新的链表的最前端
reverseNode.next = temp; //将temp连接到新的链表上
temp = next; //让temp后移
}
//将head.next指向reverseNode.next,实现单链表的反转
linkedList.head.next = reverseNode.next;
}