题目描述:
输入一个链表,反转链表后,输出新链表的表头。
思路分析:
当前节点为head,反转链表应该将当前节点的下个节点next指向当前节点,而当前节点的next则为pre,但是如果直接将下个节点的next指针指向当前节点则会使后面的链表断掉,所以应该记录当前节点的下一个节点。依次反复这个操作。。。
AC代码:
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode ReverseList(ListNode head) {
// 如果head节点是空的,那么直接返回
if(head == null){
return head;
}
ListNode pre = null;
// 记录当前节点的下一个节点
ListNode next = null;
while(head != null){
// 将当前节点的下一个节点赋值给next,这样就不会使链表断掉
next = head.next;
// 翻转链表 1->2 则变成 2->1 所以将当前节点的next指向前面
head.next = pre;
// 下一个节点的前置节点为当前节点
pre = head;
// 使head等于下一个节点 重复操作 直到head为null
head = next;
}
return pre;
}
}