java反转链表
- 关于单链表的基本定义以及操作参考java单链表的基本增删改查的实现
反转机制与实现
设置反转节点,相当于单链表中的头结点。
HeroNode reverseHead = new HeroNode(0, "", "");//设置的反转头结点
遍历整个链表,从头到尾,每遍历一个节点,都放在reverseHead的最前端。
while(cur != null) {
next = cur.next;//在cur没变的时候,标记下一个节点,以备后用
cur.next = reverseHead.next;//将当前节点的下一个节点放在反转队列的最前方
reverseHead.next = cur;//将当前与当前下一个节点互换位置。
cur = next;//继续向后遍历
}
上述循环将链表反转,但此时他的头结点为reverseHead,在定义反转链表的方法时,传参为head,为单链表原来的头节点,故还需要最后一步将head.next指向reverseHead.next,此时链表才算真正的反转(而不是跑到期其他地方倒着排队),代码如下
//将head代替反转链表的reverseHead,将head.next指向reverseHead.next
head.next = reverseHead.next;
- 总体方法代码
public static void reverseList(HeroNode head) {
//1.链表只有一个节点或者为空时不需要翻转
if(head.next==null || head.next.next == null) {
return;
}
HeroNode cur = head.next;
HeroNode next = null;
HeroNode reverseHead = new HeroNode(0, "", "");//设置的反转头结点
//遍历整个链表,从头到尾,没遍历一个节点,都放在reverseHead的最前端
while(cur != null) {
next = cur.next;//在cur没变的时候,标记下一个节点,以备后用
cur.next = reverseHead.next;//将当前节点的下一个节点放在反转队列的最前方
reverseHead.next = cur;//将当前节点链接到新链表上
cur = next;
}
//将head代替反转链表的reverseHead
head.next = reverseHead.next;
}