地址: https://leetcode.cn/problems/UHnkqh/
解题思路(迭代):
在遍历链表时,将当前节点的next指针改为指向上一个节点,由于节点没有引用其前一个节点因此必须事先存储其前一个节点。在更改引用之前,还需要存储后一个节点,最后返回新的头引用。
public class 反转链表_迭代 {
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; }
}
public ListNode reverseList(ListNode head) {
ListNode prev = null;
ListNode curr = head;
while (curr !=null){
//next是当前节点的指针
ListNode next = curr.next;
//当前节点的指针指向上一个节点 并且存储在变量中.
curr.next = prev;
//上一个节点就是当前节点
prev = curr;
curr = next;
}
//最后
return prev;
}
}
递归方式实现:
public class 反转链表_递归 {
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; }
}
public ListNode reverseList(ListNode head) {
//为了不陷入死循环
if (head ==null || head.next ==null) return head;
ListNode newHead = reverseList(head.next);
//假如head=5 那么head.next是4 让4的指针指向5
head.next.next = head;
head.next = null;
return newHead;
}
}