//1:使用p和q连个指针配合工作,使得两个节点间的指向反向,同时用r记录剩下的链表。
LinkNode *reverse(LinkNode *head)
{
if(head==NULL||head->next==NULL)
return head;
LinkNode *r,*p,*q;
p=head;
q=head->next;
head->next=NULL;
while(q){
r=q->next;
q->next=p;
p=q;
q=r;
}
head=p;
return head;
}
//对于一条链表,从第2个节点到第N个节点,依次逐节点插入到第1个节点(head节点)之后,
//(N-1)次这样的操作结束之后将第1个节点挪到新表的表尾即可。
LinkNode* Reverse(LinkNode* head)
{
LinkNode* p;
LinkNode* q;
p=head->next;
while(p->next!=NULL){
q=p->next;
p->next=q->next;
q->next=head->next;
head->next=q;
}
p->next=head;//相当于成环
head=p->next->next;//新head变为原head的next
p->next->next=NULL;//断掉环
return head;
}
//链表融合
LinkNode* list_merge( LinkNode *head1, LinkNode *head2 )
{
LinkNode *res;
if (head1 == NULL) return head2;
if (head2 == NULL) return head1;
if (head1->key < head2->key)
{
res = head1;
printf("res1 %d\n",res->key);
res->next = list_merge( head1->next, head2);
} else {
res = head2;
printf("res2 %d\n",res->key);
res->next = list_merge( head1, head2->next);
}
return res;
}