剑指 Offer 24. 反转链表
2020-08-11 本文已影响0人
bangbang2
image.png
image.png
image.png
首先来说,需要定义两个指针:pre=null 和cur=head;
cur指向当前节点
主要思路:
while循环,循环条件cur!=null
1:next=cur.next;//就是来记录当前节点的下一个节点,因为一会要断开cur.next
2:cur.next=pre;//pre代表的就是前面已经反转的链表,cur.next代表的是将cur也加入已经反转的链表中
3:pre=cur;//pre向前来移动
4:cur=next;//cur向前移动
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
ListNode l1=new ListNode();
ListNode l2=null;//必须为空,不能为空节点,不然会多出一个0
ListNode cur=head;
while(cur!=null){
l1=cur.next;
cur.next=l2;//cur的下一个指向l2
l2=cur;//往前移动
cur=l1;//往前移动
}
return l2;
}
}