示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
先上代码!
/**
* 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 newHead = null;//新的链表的头节点
ListNode prve = null;//当前需要反转的节点的前驱
ListNode val = head;//当前需要反转的节点
ListNode valNext;
while (val != null) {
valNext =val.next;
if (valNext == null) {
newHead = val;
}
val.next = prve;
prve = val;
val = valNext;
}
return newHead;
}
}
定义一个头节点,用来最后返回头节点的值;定义prve为需要反转的节点的前驱;定义val为需要反转的节点,要反转一个单链表,则根据下面这张图来反转。
图片上的cur其实就是代码中的val,当val不等于空的时候,进入循环,先把val.next的值用valNext保存起来,如果valNext的值为空,则已经遍历到单链表的结尾,将val的值赋给头节点;如果不为空,把val.next的值赋给节点前驱Prve,将节点前驱的值赋给节点val;最后更新val的值为valNext。构成一个循环,完成对整个单链表的遍历,最后返回newHead的值。