1、不能简单的交换数值,而是需要更改指针,即确实更改了节点; 2、如果节点个数是奇数,如下图: 那么第5个节点不用交换。只需变成如下图所示链表即可: 但是再考虑节点个数的奇偶,逻辑会比较麻烦; 3、在交换的过程中指针的指向如何更改也是一个问题。 如何交换 以交换3和4为例; 需要进行如下几步操作: 将2节点...
初始化两个指针 prev 和 curr,分别指向链表的头节点的前一个节点(或虚拟头节点)和头节点。进入循环,直到 curr 或 curr.next 为 null。在循环中,执行以下操作:交换 curr 和 curr.next 的指针。更新 prev 和 curr 的位置,以便处理下一对节点。返回交换后的链表的头节点。Java代码实现 时间复杂度和空间...
publicListNode swapPairs(ListNode head) { ListNode tmp =newListNode(0);//申请一个空的节点 tmp.next = head;//让链表的头节点指向那个空节点的下一个节点 ListNode temp = tmp;//把这个空节点保存下来,用这个变量去完成交换 while(head !=null&& head.next !=null){ temp.next = head.next; head.n...
之所以是k-2是因为每次都要处理成对的两个节点,所以递归要从成对后的第三个节点开始。递归返回的结果是已经翻转完成后的链表的首节点,那么如果把这个首节点的两个前驱对换,再把递归返回来的结果连在第一个前驱后面,即可完成整个k节点的翻转。详见代码注释。 解法一(Java) /*** Definition for singly-linked lis...
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例: 1->2->3->42->1->4->3 l2 nextStart l1 l2 nextStart 1->2->3->4->5->6 2->1->3-4>5->6
LeetCode---两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 示例: 1->2->3->42->1->4->3 说明: 你的算法只能使用常数的额外空间。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 代码如下: ...