给你单链表的头节点 head
,请你反转链表,并返回反转后的链表。
思路非常简单,使用三个指针分别指向操作节点的上一个,操作节点,操作节点下一个。遍历链表,(结点未被指向便会被自动回收,就是找不到了,所以要保证时刻每个结点都有指向,并且可以循环)。代码如下:
/**
* 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) {
ListNode a=null,b=head,c=null;
while(b!=null){
c=b.next;
b.next=a;
a=b;
b=c;
}
return a;
}
}
这个依旧是迭代,学习递归!!
class Solution {
public ListNode reverseList(ListNode head) {
if (head == null || head.next == null) {
return head;
}
ListNode newHead = reverseList(head.next);
head.next.next = head;
head.next = null;
return newHead;
}
}
需要注意的是 n1 的下一个节点必须指向∅。如果忽略了这一点,链表中可能会产生环。