版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zj15527620802/article/details/83280567
先上代码,已经AC.
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode ReverseList(ListNode head) {
if(head==null) {
return null;
}
ListNode pre=null;
ListNode next=null;
while(head!=null) {
next=head.next;//让next引用指向head下一个节点,
head.next=pre;//pre始终指向当前head的前一个节点,这样可以反转节点了。
pre=head;
head=next;
}
return pre;
}
}
这道题,我们要做到的是反转链表,我们的思路是将前一个节点与后一个节点断开,然后让前一个节点指向后一个节点,这个过程就需要节点引用(可以理解为指针)来确定记录当前操作节点的前一个节点和后一个节点。
ListNode pre=null;定义pre节点引用指向当前操作节点的前一个节点,最开始头结点的前一个节点肯定是null。
ListNode next=null; 定义next节点引用指向当前操作节点的后一个节点,我们开始也让他指向null.
next=head.next;//让next引用指向head下一个节点,
head.next=pre;//pre始终指向当前head的前一个节点,这样可以反转节点了。
pre=head;这个时候,pre就由当前操作节点的上一个节点变成了当前操作节点了,可以进行下一个当前操作节点的反转操作了
head=next; 这个就是下一个操作节点。
链表反转,是链表操作的常见题型,把握其中的核心算法,其实很容易理解