[开心IT面试题] 两个有序链表的合并

2014-11-24 02:44:47 · 作者: · 浏览: 1
题目:有两个有序链表,各自内部是有序的,但是两个链表之间是无序的
思路:假设两个有序链表分别为first和second。建立两个单链表p1, p2。分别从链表头开始遍历,比较p1->data和p2->data,若p1->data >= p2->data,取p2,p1=p1->next;否则取p1,p2=p2->next。当其中一个链表遍历完后,将另一个链表的剩下部分赋给结果。
代码:
Node *Merge_LinkList(Node *first, Node *second)  
{  
    if(first == NULL)  
    {  
        return second;  
    }  
    if(second == NULL)  
    {  
        return first;  
    }  
    Node *p1, *p2, *result, *temp;  
    p1 = first;  
    p2 = second;  
    result = NULL;  
  
    if(p1->
data >= p2->data) { result = p2; p2 = p2->next; }else { result = p1; p1 = p1->next; } temp = result; while(p1 != NULL && p2 != NULL) { if(p1->data >= p2->data) { temp->next = p2; temp = p2; p2 = p2->next; }else { temp->next = p1; temp = p1; p1 = p1->next; } } if(p1 != NULL) { temp->next = p1; } if(p2 != NULL) { temp->next = p2; } return result; }