首页 新闻 搜索 专区 学院

一道面试题,求最佳解法

0
悬赏园豆:5 [待解决问题]

Question: 写一个方法(用C#或 C++) 合并两个有序的linked list。给定的数据结构如下:

            C++:

 class Node
 {
  public:
  int data;
  Node* next;
};

            C#:

class Node
{
  public int data;
  public Node next;
};

要求实现方法:

用 C++:

Node* Merge (Node* head1, Node* head2)

{

 …

 }

或用 C#:

Node Merge (Node head1, Node head2)

 {

 …

}

            输入是两个有序 linked lists (升序) 合并它们成为一个有序 linked list (升序)并返回新的head. 这两个 lists可能含带相同数据的结点(是整型). 结果不要有重复的数据。

Brianlicorice的主页 Brianlicorice | 初学一级 | 园豆:198
提问于:2013-02-20 18:22
< >
分享
所有回答(5)
0

没分了,学习了

Invictus | 园豆:76 (初学一级) | 2013-02-20 19:59
0

其实挺简单的啊,两个都是升序嘛,用两个指针保持它们的head,然后从两个里面选择最小的节点,挂到结果链表尾部,最后返回去这个结果就玩了。

hoodlum1980 | 园豆:543 (小虾三级) | 2013-03-22 22:55
0
View Code
/// <summary> 
        /// 将两个有序单链表合并成一个新的有序单链表(带头结点,采用尾插法) 
        /// </summary> 
        /// <param name="Ha">有序表a</param> 
        /// <param name="Hb">有序表b</param> 
        /// <returns></returns> 
        private LinkList<int> Merge(LinkList<int> Ha, LinkList<int> Hb)
        {
            LinkList<int> Hc = new LinkList<int>();
            Node<int> p = Ha.Head.Next;
            Node<int> q = Hb.Head.Next;
            Node<int> s = new Node<int>();

            Hc = Ha;
            Hc.Head.Next = null;

            while (p != null && q != null)
            {
                if (p.Data < q.Data)
                {
                    s = p;
                    p = p.Next;
                }
                else
                {
                    s = q;
                    q = q.Next;
                }
                Hc.Append(s.Data);
            }

            if (p == null)
            {
                p = q;
            }

            while (p != null)
            {
                s = p;
                p = p.Next;
                Hc.Append(s.Data);
            }
            return Hc;
        }


 

beyondchina | 园豆:680 (小虾三级) | 2013-03-26 14:36
0

 用递归的方法操作:

Node* Merge(Node* head1, Node* head2)

{

if(head1 == null)

  return head2;

if(head2 == null)

  return head1;

Node* head = null;

if(head1->data < head2->data)

{  

  head = head1;

  head->next = Merge(head1->next, head2);

}

else{

  head = head2;

  head->next = Merge(head1, head2->Next);

}

return head;

}

风小手 | 园豆:248 (菜鸟二级) | 2013-04-15 23:13
0

高手很多,学习了

ZGHAPPY | 园豆:207 (菜鸟二级) | 2013-12-12 11:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册