面试算法整理(三)
已知两个链表headq1和head2各自有序,请把它们合并成一个链表依然有序
一个链表的节点结构:
struct Node
{
int data;
Node* next;
};
typedef struct Node Node;
Node* Merge(Node* head1, Node* head2)
{
if(head1 == NULL)
return head2;
if(head2 == NULL)
return head1;
Node* head = NULL;
Node* p1 = NULL;
Node* p2 = NULL;
if(head1->data < head2->data)
{
head = head1;
p1 = head1->next;
p2 = head2;
}
else
{
head = head2;
p2 = head2->next;
p1 = head1;
}
Node* pcurrent = head;
while(p1 != NULL && p2 != NULL)
{
if(p1->data <= p2->data)
{
pcurrent->next = p1;
pcurrent = p1;
p1 = p1->next;
}
else
{
pcurrent->next = p2;
pcurrent = p2;
p2 = p2->next;
}
}
if(p1 != NULL)
pcurrent->next = p1;
if(p2 != NULL)
pcurrent->next = p2;
return head;
}
编写一个 C 函数,该函数在一个字符串中找到可能的最长的子字符串,且该字符串是由同一字符组成的