c语言猴子选王链表方法,用链表写的猴子选大王

该博客展示了如何使用C++定义结构体和链表,并实现动态节点的添加功能。在main函数中,首先创建链表并调用addNode函数插入10个节点,然后遍历链表打印节点值。最后,还介绍了删除链表节点的方法和对链表进行排序的示例。
摘要由CSDN通过智能技术生成

bc69a0c18fc82b77df5e30c2b73b2f2d.png

a8830aa3e473f1afdd8e7f5631fb8b5a.png

Code

#include#includetypedefstructnode

{intvalue;structnode*next;

}node,*node_list;voidaddNode(node_list&l)

{

node_list temp2=l;for(inti=1; i<10; i++)

{

node_list temp=(node_list)malloc(sizeof(structnode));

temp->next=NULL;

temp->value=i;

l->next=temp;

l=l->next;

}

l=temp2;

}voidmain()

{

node_list l;

node_list p;

l=(node_list)malloc(sizeof(structnode));

l->next=NULL;

l->value=0;

p=l;

addNode(p);

p=l;while(p!=NULL)

{

printf("%d \n",p->value);

p=p->next;

}

}

bc69a0c18fc82b77df5e30c2b73b2f2d.png

a8830aa3e473f1afdd8e7f5631fb8b5a.png

Code

#include#includetypedefstructnode

{intvalue;structnode*next;

}node,*node_list;

node_list addNode(node_list&l,inti)

{

node_list temp=(node_list)malloc(sizeof(structnode));

temp->next=NULL;

temp->value=i;

l->next=temp;returntemp;

}voidmain()

{

node_list l;

node_list p, temp;

l=(node_list)malloc(sizeof(structnode));

l->next=NULL;

l->value=0;

temp=l;for(inti=1;i<10; i++)

{

l=addNode(l, i);

}

p=temp;while(p!=NULL)

{

printf("%d \n",p->value);

p=p->next;

}

}

#include

using namespace std;

typedef struct test

{

int id;

test *next;

};

test * newnode;

/*删除后返回当前结点*/

test* delete_node(test *headnode, test *deletenode)

{

if (headnode->next == NULL)

return NULL;

test * f_head = headnode;

test * f_head_next = f_head->next;

while (f_head_next != NULL)

{

if (f_head_next == deletenode)

{

if (f_head_next->next == NULL)

{

f_head->next = NULL;

cout<id<

}

else

{

f_head->next = f_head_next->next;

return f_head_next->next;

}

break;

}

f_head = f_head->next;

f_head_next = f_head->next;

}

}

// 增加新结点

test * addnode(test * node, int idnum)

{

newnode = new test;

newnode->id = idnum;

newnode->next = NULL;

node->next = newnode;

return newnode;

}

//排序

void sort(test *head)

{

if (head->next == NULL)

return;

int temp;

test * headnode = head;

test * second = headnode->next;

while (headnode != NULL)

{

second = headnode->next;

while (second != NULL)

{

if ((headnode->id )> (second->id))

{

temp = headnode->id;

headnode->id = second->id;

second->id = temp;

}

second = second->next;

}

headnode = headnode->next;

}

}

int main(void)

{

cout<

test head;

int nodenum = 0 ;

test *temp = &head;

test *currentNode = &head; //此处变量相当于中间变量,为链表当前结点位置

test *before_node = head.next;

bool ishead = false;

cout<

while (nodenum ++ != 30)

{

if (!ishead)

{

head.id =nodenum;

ishead = true;

continue;

}

before_node = currentNode; /*保存指针的前一个位置*/

currentNode = addnode(currentNode, nodenum);

}

sort(temp);

temp = &head;

int i = 1;

cout<

while (temp!= NULL)

{

cout<id<

temp = temp->next;

i++;

}

/*尾部指针指向头指针*/

currentNode->next = &head;

cout<

//before_node = delete_node(&head, before_node);

//cout<id<

/*开始选大王*/

temp = &head;

i = 0;

int node_num = 30;

while (node_num != 1)

{

i++;

if (7 == i)

{

cout<id<

temp = delete_node(&head, temp);

i = 0;

node_num--;

}

else

temp = temp->next;

}

cout<id<

delete [] newnode;        //释放

return 0;

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值