给你单链表的头节点 head
,请你反转链表,并返回反转后的链表。
示例 1:
输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1]
示例 2:
输入:head = [1,2] 输出:[2,1]
示例 3:
输入:head = [] 输出:[]
思路
想办法将节点的next记录的下个节点替换成上个节点。
需要创捷一个容器用来存放当前节点,以便放入下个节点的next中。
还需要一个容器用来正常的链表遍历。因为链表中的next需要发生改变。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
if(head==null){ //判空
return null;
}
ListNode a = head;
ListNode b;
ListNode shang = null; //记录当前节点,在下一节点中就为前节点。同时也是next的新指向
while (a.next != null){
b = a;
a = a.next;
b.next = shang;
shang = b;
}
head.next = null; //反转后为尾节点,next赋null
a.next = shang; //因循环到最后一个节点就会中止,因此此处需要单独进行添加
return a;
}
}