刷题之反转链表

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

刷题之反转链表_第1张图片

 思路非常简单,使用三个指针分别指向操作节点的上一个,操作节点,操作节点下一个。遍历链表,(结点未被指向便会被自动回收,就是找不到了,所以要保证时刻每个结点都有指向,并且可以循环)。代码如下:

/**
 * 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​ 的下一个节点必须指向∅。如果忽略了这一点,链表中可能会产生环。

你可能感兴趣的:(算法学习,链表,数据结构,算法)