700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > c语言线性链表就地逆置 C语言:单链表实现(二) 就地逆置 就地归并

c语言线性链表就地逆置 C语言:单链表实现(二) 就地逆置 就地归并

时间:2018-07-17 00:22:18

相关推荐

c语言线性链表就地逆置 C语言:单链表实现(二) 就地逆置 就地归并

#include

#include

#include

#define LEN sizeof(struct Nodelist)

using namespace std;

typedef struct Nodelist

{

int data;;

struct Nodelist *next;

}Nodelist;

//函数声明

void Error(char *s); //错误处理函数

Nodelist *CreatNode(void); //后插法创建单链表

Nodelist *ReverseList(Nodelist *head); //就地逆置函数

void MeryNode(Nodelist &l1, Nodelist &l2); //就地归并函数

void printNode(Nodelist L); //输出函数

//函数定义

void Error(char *s) //错误处理函数

{

cout << s << endl;

exit(1);

}

Nodelist *CreatNode(void) //后插法创建单链表

{

int i, n;

Nodelist *head, *p, *q;

p = q = NULL;

head = NULL;

cout << "请输入您要建立的链表长度:";

cin >> n;

cout << "请输入您要输入的数据:" << endl;;

for (i = 0; i

{

p = (Nodelist *)malloc(LEN);

cin >> p->data;

if (head == NULL) //单个结点

q = head = p;

else

q->next = p;

q = p;

}

p->next = NULL;

return head;

}

void printNode(Nodelist L) //将链表依次数据输出

{

Nodelist *p = &L;

while (p)

{

cout << p->data << " ";

p = p->next;

}

cout << endl;

}

Nodelist *ReverseList(Nodelist *head) //就地逆置函数

{

Nodelist *p, *q, *r;

p = head;

q = r = NULL;

while (p)

{

q = p->next;

p->next = r;

r = p;

p = q;

}

return r;

}

void MeryNode(Nodelist &l1, Nodelist &l2) //就地归并函数

{

Nodelist *pa, *pb, *pc, *pd;

pa = &l1;

pb = &l2;

pc = pa;

while (pa&&pb)

{

if (pa->data <= pb->data)

{

pc = pa;

pa = pa->next;

}

else

{

pd = pb->next;

pb->next = pa;

pc->next = pb;

pc = pb;

pb = pd;

}

}

if (pb!=NULL)

pc->next = pb;

}

int main() //主函数测试

{

Nodelist *head1, *head2;

head1 = CreatNode();

cout << "逆置前的链表数据:" << endl;

printNode(*head1);

Nodelist *head3 = ReverseList(head1);

cout << "逆置后的链表数据:" << endl;

printNode(*head3);

head2 = CreatNode();

cout << "逆置前的链表数据:" << endl;

printNode(*head2);

Nodelist *head4 = ReverseList(head2);

cout << "逆置后的链表数据:" << endl;

printNode(*head4);

cout << "就地归并后:" << endl;

MeryNode(*head3, *head4);

printNode(*head3);

return 0;

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。