题目:反转链表
题目描述:
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
限制:
0 <= 节点个数 <= 5000
public class ReverseLinkedList {
static class ListNode{
int val;
ListNode next = null;
ListNode(int val){
this.val = val;
}
}
public static void main(String[] args) {
ListNode head = new ListNode(1);
ListNode node2 = new ListNode(2);
ListNode node3 = new ListNode(3);
ListNode node4 = new ListNode(4);
ListNode node5 = new ListNode(5);
head.next = node2;
node2.next = node3;
node3.next = node4;
node4.next = node5;
//ListNode head = new ListNode(1);
head = reverseList(head);
System.out.println(head.val);
}
public static ListNode reverseList(ListNode head){
//head为当前节点,如果当前节点为空的话,那就什么也不做,直接返回null
ListNode pre = null; //pre为当前节点的前一节点
ListNode next = null; //next为当前节点的下一节点
while (head != null) {
//next保存head的下一个节点的信息,保证单链表不会因为失去head节点的原next节点而就此断裂
next = head.next;
//保存完next,就可以让head从指向next变成指向pre了
head.next = pre;
//head指向pre后,就继续依次反转下一个节点
//让pre,head,next依次向后移动一个节点,继续下一次的指针反转
pre = head;
head = next;
}
//如果head为null的时候,pre就为最后一个节点了,但是链表已经反转完毕,pre就是反转后链表的第一个节点
return pre;
}
}