单向链表的反转
程序员文章站
2024-03-21 14:40:58
...
单向链表的反转
我理解的链表反转和往前插入一样,虽然单链表不知道前一个节点,但是我们创建
一个新的空链表,他的head节点是知道的。
1.将第一个节点插入到新链表的头节点后面,即(newHead之后)
2.将第二个节点插入到第一个节点1前面,就是newHead之后,
3.依次插入,直到为空, 新链表就成了反转后的链表
4.最后 head.next = newHead.next;
temp就是要插入的当前节点,next是temp的下一个节点
//核心代码
while(true) {
if(temp==null) {
break;
}
next = temp.next;
temp.next = newHead.next;
newHead.next = temp;
temp = next;
}
head.next = newHead.next;
1.插入第一个节点
开始temp为数据1
next = temp.next 用来保存下一个节点
开始新链表的newHead.next为null,
我们将temp.next = newHead.next;此时temp.next为null,
然后newHead.next = temp;第一个节点插入成功。
temp = next;节点后移(注意不是temp=temp.next)
2.插入第二个节点
原理类似,就是插入节点。(插入是先后在前)
此时temp为数据2,
temp.next = newHead.next; 数据2的next就是数据1
newHead.next = temp; 头节点的next就是数据2,插入成功
temp = next;节点后移;
3…依次插入,直到为空, 新链表就成了反转后的链表
4.最后 head.next = newHead.next;
完整代码
//反转列表
static void reverseList(HeroNode head) {
if(head.next==null) {
System.out.println("链表为空");
return;
}
HeroNode temp = head.next;
HeroNode next = null;
HeroNode newHead = new HeroNode(0, "", "");
while(true) {
if(temp==null) {
break;
}
next = temp.next;
temp.next = newHead.next;
newHead.next = temp;
temp = next;
}
head.next = newHead.next;
}