由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 合并两个排序好的链表, 优解?
相关主题
弱问一个小问题,leetcode 上merge sorted list请问大牛们Leetcode Reorder List 中找中间节点怎么能现场想清楚?多谢!
问个reverse linked list删除node从list, 这个有内存泄露么,怎么释放内存,对于那个被删除的节点?
请问大牛们如何提高解决leetcode上面Linkedlist的题的能力?一道挺简单的题给搞砸了
yelp 面经弱问题,连反转链表都看不懂了
【我自己写的LinkedList为什么总有错?】问一个merge K sorted list的时间复杂度
M家 onsite 悲剧,同胞们弄死烙印吧透露两个G的onsite题
大牛们帮忙,Rverse Nodes in k-Group面试题
如何删除 linked list 的最后一个元素 (转载)Print a binary tree in level order but starting from leaf node up to root
相关话题的讨论汇总
话题: node话题: null话题: listnode话题: next话题: l1
进入JobHunting版参与讨论
1 (共1页)
Q*******e
发帖数: 939
1
抛砖引玉,
struct list_node *
merge2sorted2(struct list_node *a, struct list_node *b)
{
int first_node;
struct list_node *head = NULL;
struct list_node *cur = NULL, *node;
if (a == NULL) return b;
if (b == NULL) return a;
first_node = 1;
while (a || b ) {
if (a && b) {
if (a->data < b->data) {
node = a;
a = a->next;
} else {
node = b;
b = b->next;
}
} else if (a) {
node = a;
a = a->next;
} else {
node = b;
b = b->next;
}
if (first_node) {
head = node;
cur = node;
first_node = 0;
} else {
cur->next = node;
cur = cur->next;
}
}
return head;
}
b***m
发帖数: 5987
2
这个还能多优?

【在 Q*******e 的大作中提到】
: 抛砖引玉,
: struct list_node *
: merge2sorted2(struct list_node *a, struct list_node *b)
: {
: int first_node;
: struct list_node *head = NULL;
: struct list_node *cur = NULL, *node;
: if (a == NULL) return b;
: if (b == NULL) return a;
: first_node = 1;

c*****a
发帖数: 808
3
差不多
h****n
发帖数: 1093
4
用递归吧,很快就写完了
h****n
发帖数: 1093
5
写了三个方法,一个是递归,一个是naive方法,一个是用指向指针的指针来构建
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
ListNode* res;

//Method using pointer to pointer
res = P2PMethod(l1,l2);
//res = recursive(l1,l2);
//res = naiveMethod(l1,l2);
return res;
}

ListNode* naiveMethod(ListNode *l1, ListNode *l2)
{
if(l1==NULL&&l2==NULL) return NULL;
if(l1==NULL) return l2;
if(l2==NULL) return l1;
ListNode * curP1 = l1;
ListNode * curP2 = l2;
ListNode newHead(0);
ListNode * cur= &newHead;
while(curP1&&curP2)
{
if(curP1->valval)
{
cur->next = curP1;
curP1 = curP1->next;
}
else
{
cur->next = curP2;
curP2 = curP2->next;
}
cur = cur->next;
}

if(curP1||curP2)
{
while(curP1)
{
cur->next = curP1;
curP1=curP1->next;
cur = cur->next;
}
while(curP2)
{
cur->next = curP2;
curP2=curP2->next;
cur = cur->next;
}
}
cur->next = NULL;


return newHead.next;
}


ListNode* recursive(ListNode *l1, ListNode *l2)
{
if(l1==NULL&&l2==NULL) return NULL;
if(l1==NULL) return l2;
if(l2==NULL) return l1;

if(l1->valval)
{
l1->next = mergeTwoLists(l1->next, l2);
return l1;
}
else
{
l2->next = mergeTwoLists(l1, l2->next);
return l2;
}
}

ListNode* P2PMethod(ListNode *l1, ListNode *l2)
{
ListNode* res;
ListNode** resp = &res;

while(l1||l2)
{
if(l1&&l2)
{
if(l1->val>l2->val)
{
*resp = l2;
resp = &(l2->next);
l2 = l2->next;
}
else
{
*resp = l1;
resp = &(l1->next);
l1 = l1->next;
}
}
else if(l1)
{
*resp = l1;
resp = &(l1->next);
l1 = l1->next;
}
else
{
*resp = l2;
resp = &(l2->next);
l2 = l2->next;
}
}
*resp = NULL;
return res;
}
};
1 (共1页)
进入JobHunting版参与讨论
相关主题
Print a binary tree in level order but starting from leaf node up to root【我自己写的LinkedList为什么总有错?】
问个题,用递归方法M家 onsite 悲剧,同胞们弄死烙印吧
一道linked list编程题大牛们帮忙,Rverse Nodes in k-Group
amazon onsite 面经如何删除 linked list 的最后一个元素 (转载)
弱问一个小问题,leetcode 上merge sorted list请问大牛们Leetcode Reorder List 中找中间节点怎么能现场想清楚?多谢!
问个reverse linked list删除node从list, 这个有内存泄露么,怎么释放内存,对于那个被删除的节点?
请问大牛们如何提高解决leetcode上面Linkedlist的题的能力?一道挺简单的题给搞砸了
yelp 面经弱问题,连反转链表都看不懂了
相关话题的讨论汇总
话题: node话题: null话题: listnode话题: next话题: l1