c++一个链表问题

来源:百度知道 编辑:UC知道 时间:2024/05/28 23:44:16
一个链表的结点结构
struct tagNode
{
int data ;
Node *next ;
};
typedef struct tagNode Node ;

(1)已知链表的头结点head,写一个函数把这个链表逆序 ( Intel)

Node * ReverseList(Node *head) //链表逆序

(2)已知两个链表head1 和head2 各自有序,请把它们合并成一个链表依然有序。(保留所有结点,即便大小相同)
Node * Merge(Node *head1 , Node *head2)

(1) 参考楼上
(2):
Node * Merge(Node *p1,Node *p2)
{
if (NULL == p1)
{
return p2;
}
if (NULL == p2)
{
return p1;
}

Node * R, *pa,*pb,*ra;
pa = p1; pb = p2; // 不去改变传入的指针所指向的值,不会改变p1,p2的原始值

if (pa->data > pb->data)
{
ra = pb;
pb = pb->next;
}
else
{
ra = pa;
pa = pa->next;
}

R = ra ; // 指向开始的结点;
while(pa!= NULL && pb!= NULL)
{
if (pa->data > pb->data)
{
ra->next = pb;
ra= pb;
pb = pb->next;
}
else
{
ra->next = pa;
ra = pa;
pa = pa->next;
}
}

if(pa!=NULL)
ra->next=pa;
if(pb!=NULL)
ra->next=pb;
return R;
}

Node * ReverseList(Node *head)
{
Node *newHead = NULL, *oldList = head, *current = head;
while (oldList != NULL)<