写链表逆序,两个链表合并成有序链表

struct Node{
 int data;
 Node *next;
};
typedef struct Node Node;
Node *Reverse(Node *head){
if(head==NULL||head->next==NULL)
{ return head;} 
Node *p1=head;
Node *p2=p1->next;
Node *p3=p2->next;
p1->next=NULL;
while(p3!=NULL){
 p2->next=p1;
 p1=p2;
 p2=p3;
 p3=p3->next;
}
p2->next=p1;
head=p2;
return head;}


 

上面条件为:已知链表的头结点 head, 写一个函数把这个链表逆序 

2、已知两个链表 head1 和 head2 各自有序,请把它们合并成一个链表依然有序。

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->data;
   p1=head1->next;
   p2=head2;
}else{
 head=head2->data;
 p1=head1;
 p2=head2->next;
}
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 ;
}

3.已知两个链表 head1 和 head2 各自有序,请把它们合并成一个链表依然有序,这次要求用递归方法进行。

Node * MergeRecursive(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 = MergeRecursive(head1->next,head2);
}
else
{
  head = head2 ;
  head->next = MergeRecursive(head1,head2->next);
}
return head ;

猜你喜欢

转载自blog.csdn.net/single6/article/details/82227796
今日推荐