剑指 Offer 24. 反转链表
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
/**
* 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 pre=null;
while(head!=null){
ListNode temp=head.next;
head.next=pre;
pre=head;
head=temp;
}
return pre;
}
}
指针移动:
1、先建立一个空节点作为新链表的尾部空节点
2、循环遍历原链表,结束条件为头节点为null
3、每次遍历都需要把当前节点的next指向前一个节点,这样后一个节点就无法知道了,所以用temp存储起来
4、接着把前一个节点指针移动到当前节点cur,当前节点的指针移动到存储的节点吗,即下一个节点
5、循环结束,返回前一个节点就是最后一个非空节点