做电商网站用什么软件,个人网站制作与设计论文,做一个平台网站的预算,手机上编写html的软件这道题还是比较简单#xff0c;我看完题目的想法就是借助一个第三变量#xff0c;来改变两个节点的指针的指向#xff0c;比如我要改变1和2节点的指向#xff0c;我用h1表示节点1#xff0c;我创建一个新的节点ans#xff0c;先拿ans指向节点2#xff08;ans.next h1.n… 这道题还是比较简单我看完题目的想法就是借助一个第三变量来改变两个节点的指针的指向比如我要改变1和2节点的指向我用h1表示节点1我创建一个新的节点ans先拿ans指向节点2ans.next h1.next,然后再拿节点1指向节点3h1.next h1.next.next,然后再拿节点2指向节点1ans.next.next h1现在的情况就是ans -- 2 --1(h1) --3,接下来要交换节点3和节点4我把h1移到3的位置h1h1.next和ans移到h1的前面一个位置ansans.next.next,现在的情况就是 --2---1(ans) --3(h1) --4,接下来就可以像交换1和2一样交换3和4了。但是移动h1和ans之前我们先做判断如果3的位置是null或者4的位置是null就不用再交换了直接返回答案即可答案就是我们创建的ans的下一个节点所以再创建ans的同时我就用一个result变量储存ans的地址最后返回resutl-next即可一下是我的代码
class Solution {public ListNode swapPairs(ListNode head) {ListNode h1 head;if(h1 null || h1.next null)return h1;ListNode ans new ListNode();ListNode result ans;while(h1 ! null h1.next ! null){ans.next h1.next;h1.next h1.next.next;ans.next.next h1;if(h1.next ! null){h1 h1.next;}else{return result.next;}ans ans.next.next;}return result.next;}
}
看看题解做法
题解的第一种做法是使用递归用head表示原始链表的第一个节点新链表的第二个节点用newHead表示原始链表的第二个节点新链表的第一个节点。原始链表的其余节点的头节点是newHead.next,令head.nextswapPairs(newHead.next),表示将其余节点进行两两交换交换后的头节点是head的下一个节点然后令newHead.nexthead,即完成了所有节点的交换最后返回新链表的头节点newHead
class Solution {public ListNode swapPairs(ListNode head) {if (head null || head.next null) {return head;}ListNode newHead head.next;head.next swapPairs(newHead.next);newHead.next head;return newHead;}
}
第二种方法就和我的解法一样他管这个ans节点叫做哑节点。