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

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 ;

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值