leetcode 第22-24题Merge k Sorted Lists & Swap Nodes in Pairs & Reverse Nodes in k-Group
来源:互联网 发布:钢铁侠反应堆淘宝 编辑:程序博客网 时间:2024/05/17 02:54
Merge k Sorted Lists 该题可以在 Merge Two Sorted Lists的基础上进行,通过将k个链分成两两一组合并后,在不断递归这个过程即可
ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) {
ListNode *p1=l1,*p2=l2;
if(!1)return l2;
else if(!l2)return l1;
ListNode *ans=new ListNode(0);
ListNode *lc=ans;
while(p1&&p2)
{
if(p1->val<p2->val){lc->next=p1;p1=p1->next;lc=lc->next;}
else {
lc->next=p2;p2=p2->next;lc=lc->next;
}
}
if(p2)while(p2){lc->next=p2;p2=p2->next;lc=lc->next;}
else if(p1) while(p1){lc->next=p1;p1=p1->next;lc=lc->next;}
lc =ans;
ans=ans->next;
delete lc;
return ans;
}
ListNode *mymerge(vector<ListNode *> &lists,int start,int end){
if(start==end-1)return lists[start];
if(start==end-2)return (mergeTwoLists(lists[start],lists[start+1]));
return mergeTwoLists( mymerge(lists,start,(start+end)/2),mymerge(lists,(start+end)/2,end));
}
class Solution {
public:
ListNode *mergeKLists(vector<ListNode *> &lists) {
ListNode *ans=NULL;
if(lists.size()==0)return ans;
if(lists.size()==1)return lists[0];
return mymerge(lists,0,lists.size());
}
};
Swap Nodes in Pairs该题可以看成下一题的特例,只要对下一题的代码稍加修改,就可以解决该题,不过,因为该题逆序子链的长度始终是2,所以可以更简短明了的解决
class Solution {
public:ListNode *swapPairs(ListNode *head) {
if(head==NULL)return head;
ListNode *p=head,*q=head->next,*r;
if(q==NULL)return head;
p->next=q->next;
q->next=p;
head=q;
while(p->next&&p->next->next){
q=q->next;
q=q->next->next;
r=p;
p=p->next;
p->next=q->next;
q->next=p;
r->next=q;
}
return head;
}
};
Reverse Nodes in k-Group 该题思路可以考虑每次从原链表中取出长为k 的子串,通过头插法的方式逆序后,挂在结果链表后端,对于最后一个长不足k的子链,直接加在后面即可
class Solution {
public:
ListNode *reverseKGroup(ListNode *head, int k) {
if(head==NULL||k<=1)return head;
ListNode *p=head,*q=head,*r1=head,*r=head,*tmphead=NULL;
int i=0;
// while(p&&i<k){p=p->next;i++}
// if(i<k)return head;
tmphead=new ListNode (0);
head=new ListNode(0);
ListNode *tr=head;
while(p){
i=0;
while(p&&i<k){p=p->next;i++;}
if(i<k)break;
for(int x=0;x<k;x++){
r1=r1->next;
r->next=tmphead->next;
tmphead->next=r;
r=r1;
}
tr->next=tmphead->next;
tmphead->next=NULL;
while(i--)tr=tr->next;
}
tr->next=r1;
delete tmphead;
return head->next;
}
};
- leetcode 第22-24题Merge k Sorted Lists & Swap Nodes in Pairs & Reverse Nodes in k-Group
- 【LeetCode】Swap Nodes in Pairs && Reverse Nodes in k-Group
- 【LeetCode】Swap Nodes in Pairs & Reverse Nodes in k-Group
- [leetcode]Swap Nodes in Pairs Reverse Nodes in k-Group
- [Leetcode] Swap Nodes in Pairs & Reverse Nodes in k-Group
- Swap Nodes in Pairs and Reverse Nodes in k-Group
- 【Leetcode】Reverse Nodes in k-Group (Swap)
- [LeetCode] Swap Nodes in Pairs、Reverse Nodes in k-Group、Rotate List
- leetcode 24. Swap Nodes in Pairs 25. Reverse Nodes in k-Group
- Leetcode【24】:Reverse Nodes in k-Group
- LeetCode 24 Reverse Nodes in k-Group
- LeetCode24 Swap Nodes in Pairs 25. Reverse Nodes in k-Group详解
- LeetCode第25题之Reverse Nodes in k-Group
- LeetCode 第25题 Reverse Nodes in k-Group
- LeetCode:Reverse Nodes in k-Group
- LeetCode: Reverse Nodes in k-Group
- LeetCode : Reverse Nodes in k-Group
- leetcode 42: Reverse Nodes in k-Group
- 从零冲击Erlang(六)
- 系统安装过程中遇到的一些问题及解决方法
- Cocos2dx 的TCP/IP socket通信模块的设计与实现(一)
- UC编程8-信号发送函数kill/raise/setitimer/alarm和信号集函数segprocmask
- 加密(Asp.Net配置文件的)配置节
- leetcode 第22-24题Merge k Sorted Lists & Swap Nodes in Pairs & Reverse Nodes in k-Group
- ArrayList、LinkedList、 Vector、Map 用法比较
- 三种方法求最大连续子数组的和
- adb push 与 adb install 区别(两种利用adb安装APK的方法)
- 从瀑布模型到敏捷开发——认识论决定行为
- Android系统联系人数据表以及获取和写入(待写)
- Visual Assist 插件 强烈推荐的插件!
- 开源ListView上拉刷新下拉刷新
- Git使用入门