首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

翻转链表

来源: lintcode-翻转链表 描述 翻转一个链表 样例 给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null 挑战 在原地一次翻转完成 翻转链表是一个很基础的题,同时也是面试中开场常问的题...解题思路 我们都知道单链表的数据结构如下: public class ListNode { private int val; private ListNode next; } 翻转的实现是怎样的呢...这里面有两个变量: 链表节点无法获知前置节点. 当你将next节点指向前置后,next指针被改变,无法继续向下遍历. 所以我们只需要在实现中维护前置节点及后继节点的值即可....== null) { return pre; } //保存后继节点 ListNode next = head.next; //将当前节点的next指针指向前置节点(翻转操作...= null) { //记录后继节点 nextNode = head.next; //翻转,将当前节点的next指针指向前置节点 head.next = preNode;

1.1K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    K 个一组翻转链表

    给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。 k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。...若是,我们就翻转这部分链表,否则不需要翻转。 接下来的问题就是如何翻转一个分组内的子链表翻转一个链表并不难,过程可以参考「206. 反转链表」。...但是对于一个子链表,除了翻转其本身之外,还需要将子链表的头部与上一个子链表连接,以及子链表的尾部与下一个子链表连接。...如下图所示: 因此,在翻转链表的时候,我们不仅需要子链表头节点 head,还需要有 head 的上一个节点 pre,以便翻转完后把子链表再接回 pre。...有的同学可能发现这又是一件麻烦事:链表翻转之后,链表的头节点发生了变化,那么应该返回哪个节点呢?照理来说,前 k 个节点翻转之后,链表的头节点应该是第 k 个节点。

    14970

    LeetCode - K个一组翻转链表

    ,每 k 个节点一组进行翻转,请你返回翻转后的链表。...k 是一个正整数,它的值小于或等于链表的长度。 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。...示例 : 给定这个链表:1->2->3->4->5 当 k = 2 时,应当返回: 2->1->4->3->5 当 k = 3 时,应当返回: 3->2->1->4->5 说明 : 你的算法只能使用常数的额外空间...新建一个pre用于表示当前翻转链表的前置,h表示当前的头部 遍历列表,遍历一个,就把该节点放入Stack中,然后计数 当计数达到K个时,说明该翻转了,于是就从Stack中不停的获取最后一个,将pre指针指到当前的翻转过的最后一个元素...如果计数达不到K,说明已经没有更多的ListNode了,这个时候,就可以直接从Stack中取出元素,执行翻转操作。 最后,返回h这个链表的头部即可。

    45230

    最难链表题——LeetCode题目25:K 个一组翻转链表

    原题描述 + 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。...位置; 当前操作的K个节点的链表之前的子链表中,其尾部节点的位置,类似于上面题目中prev的位置。...找到上述四个位置之后,我们只需要再将K个节点组成的子链表逆序翻转即可。但这个翻转有坑,因为你要保证在翻转之后,新的头节点和前面的子链表相连,新的尾节点与后面的子链表相连。...翻转K个节点的子链表 ? 3. 将翻转后的子链表与外部链表相连 ? C++参考代码 + 在实现时,我没有使用first,second的命名,而是使用了head和tail表示。...此外,每次翻转之后,head指针要后移到未操作部分链表的首部,继续翻转下一个长度为K的子链表。 /** * Definition for singly-linked list.

    80320
    领券