反转链表_206_92
作者:互联网
LeetCode_206.反转链表:https://leetcode-cn.com/problems/reverse-linked-list/
题目描述:
给你单链表的头节点 head
,请你反转链表,并返回反转后的链表。
思路1:迭代实现 就是从头开始遍历,在遍历链表的时候,将当前节点的next指针改为指向前一个节点。 由于节点没有引用前一个节点,故需要先定义一个头节点prev,保证原来的链表第一个节点指向该节点。 遍历的时候,需要保留下一个待遍历的节点。 遍历的终止条件是:当前节点cur,不为空。 class Solution { public ListNode reverseList(ListNode head) { ListNode prev = null; ListNode cur = head; while(cur != null) { ListNode next = cur.next; cur.next = prev; prev = cur; cur = next; } return prev; } } 思路2:递归 递归的精髓在于,不要在意递归的过程,直接想递归的结果。 就是假设链表的其余部分已经被反转 比如,ListNode p = reverseList(head.next); 表示原链表的head.next部分已经完成了反转, 现在应该如何反转它前面的部分? head.next = null; head.next.next = head; return p; 即可 必须注意递归的终止条件:当head为空或者head.next为空的时候。
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; } }
LeetCode_92:反转链表的指定区间:https://leetcode-cn.com/problems/reverse-linked-list-ii/
题目描述:
给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回反转后的链表 。
ada
标签:head,ListNode,cur,206,next,链表,92,节点 来源: https://www.cnblogs.com/pfzhang18/p/16119282.html