首页 > 代码库 > 【Leetcode】Swap Nodes in Pairs in JAVA 难得的一次写对不带改的。。附赠测试程序like always
【Leetcode】Swap Nodes in Pairs in JAVA 难得的一次写对不带改的。。附赠测试程序like always
Given a linked list, swap every two adjacent nodes and return its head.
For example,
Given 1->2->3->4
, you should return the list as 2->1->4->3
.
Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.
给一个链表,两两交换。我的思路是两对两对看,但是分为三种情况,这对和后面的情形是:1-2-3-4;1-2-3;1-2;
然后根据不同的情况写出他们的交换策略~代码里有注释,看不懂的可以看注释明白我的思路~
附赠main函数供各位测试!!!
public class SwapNodesinPairs { public static void main(String args[]){ SwapNodesinPairs dp = new SwapNodesinPairs(); ListNode head = new ListNode(1); ListNode p1 = new ListNode(2); head.next=p1; ListNode p2 = new ListNode(3); p1.next = p2; ListNode p3 = new ListNode(4); p2.next = p3; ListNode p4 = new ListNode(5); p3.next = p4; prinf(head); prinf(dp.swapPairs(head)); } private static void prinf(ListNode input){ while(input!=null) { System.out.print(input.val+"->"); input = input.next; } System.out.println(); } public ListNode swapPairs(ListNode head) { if(head==null||head.next==null) return head; ListNode p=head; ListNode start = head.next; while(p!=null&&p.next!=null){ ListNode nxt = p.next; //如果后面四个都有,2连向1,1连向4,4连向3,然后切记让下一轮的p得等于3(但是由于这个算法会跳过3,所以提前存好3) if(p.next.next!=null&&p.next.next.next!=null){ p.next=nxt.next.next; ListNode tmp = nxt.next;//提前存好3 nxt.next=p; p=tmp;//让下一个p等于3,如果p.next的话下一个就是4了,而且3被永远跳过了 } //如果后面有三个,就是这一对完了,还剩一个,那么最后那个不动,这两个交换 else if(p.next.next!=null&&p.next.next.next==null){ p.next=nxt.next; nxt.next=p; p=p.next; } //就剩最后两个,自己交换即可 else if(p.next.next==null){ nxt.next=p; p.next=null; } } return start; } }
【Leetcode】Swap Nodes in Pairs in JAVA 难得的一次写对不带改的。。附赠测试程序like always
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。