Swap Nodes in Pairs 链表两两交换节点@LeetCode
来源:互联网 发布:goldwave有mac版本吗 编辑:程序博客网 时间:2024/05/22 01:58
题目:
链表两两交换节点
思路:
判断比较花时间,需要分奇数个节点和偶数个节点的情况,待改进。
package Level2;import Utility.ListNode;/** * Swap Nodes in Pairs * * 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. * */public class S24 {public static void main(String[] args) {ListNode n1 = new ListNode(1);ListNode n2 = new ListNode(2);n1.next = n2;ListNode n3 = new ListNode(3);n2.next = n3;n1.print();ListNode head = swapPairs(n1);head.print();}public static ListNode swapPairs(ListNode head) { if(head == null){ return null; } // 当只有一个元素的情况 if(head.next == null){ return head; } ListNode i = head;// i指向第1个 ListNode j = i.next;// j指向第2个 ListNode k = j.next;// k指向第3个 head = head.next; while(j != null){ j.next = i; if(k!=null && k.next!=null){// 当有偶数个节点 i.next = k.next; }else{// 当有奇数个节点 i.next = k; } // 更新i,j,k的值,前进两格 i = k; if(k != null){ j = k.next; }else{ j = null; } if(k!=null && k.next!=null){ k = k.next.next; }else{ k = null; } } return head;}}
重写:
用dummyHead解决奇偶问题,只要两个指针变量就够了
public ListNode swapPairs(ListNode head) { if(head == null || head.next == null){ return head; } ListNode dummyHead = new ListNode(0); dummyHead.next = head; ListNode cur = dummyHead; ListNode probe = cur.next; while(probe!=null && probe.next!=null){ cur.next = probe.next; probe.next = probe.next.next; cur.next.next = probe; cur = probe; probe = probe.next; } return dummyHead.next; }
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */public class Solution { public ListNode swapPairs(ListNode head) { if(head==null || head.next==null){ return head; } ListNode dm = new ListNode(0); dm.next = head; ListNode p=dm, q=head, r; while(q!=null && q.next!=null){ p.next = q.next; r = q.next.next; p.next.next = q; q.next = r; p = q; q = r; } return dm.next; }}
递归法:
public class Solution { public ListNode swapPairs(ListNode head) { return rec(head); } public ListNode rec(ListNode head) { if(head == null || head.next == null) { return head; } ListNode p = head; ListNode q = p.next.next; p.next.next = p; ListNode newHead = p.next; p.next = rec(q); return newHead; }}
- [LeetCode]Swap Nodes in Pairs 交换节点
- Swap Nodes in Pairs 链表两两交换节点@LeetCode
- LeetCode-24 Swap Nodes in Pairs(链表中按要求交换节点)
- LeetCode 24. Swap Nodes in Pairs(交换节点)
- LeetCode 24. Swap Nodes in Pairs ***** 双节点交换
- [LeetCode] Swap Nodes in Pairs(成对交换节点)
- [LeetCode]Swap Nodes in Pairs 成对交换
- LeetCode Swap Nodes in Pairs交换链表中的两个节点
- [C++]LeetCode: 109 Swap Nodes in Pairs (交换相邻节点位置)
- Leetcode Swap Nodes in Pairs 交换链表的节点对
- leetCode 24. Swap Nodes in Pairs (双数交换节点) 解题思路和方法
- Leetcode #24. Swap Nodes in Pairs 链表节点交换 解题报告
- 【链表&交换邻节点】Swap Nodes in Pairs
- Swap Nodes in Pairs 链表交换相邻的节点
- LeetCode24 Swap Nodes in Pairs 成对交换链表节点
- 24. Swap Nodes in Pairs-节点交换|指针
- Swap Nodes in Pairs 交换LinkList的相邻节点
- (LeetCode)Swap Nodes in Pairs --- 交换两个相邻的结点
- UVa 575 - Skew Binary
- MFC--ODBC数据交换RFX
- Count and Say 数数并打印 @LeetCode
- 大学综合测评中,使用VBA代码自动完成EXCEL成绩表
- 看见的没有吧还是卡迪夫档次高02
- Swap Nodes in Pairs 链表两两交换节点@LeetCode
- Definition list
- Windows软件的Linux类似/替换/相近品
- Redshift vs f.lux
- 2013-C++第8周项目参考解答链接集
- C++第8周项目1分段函数求值
- C++第8周项目2多分段函数求值
- C++第8周项目3小贺的工资
- C++第8周项目4要不要加油