用链表写的猴子选大王

ContractedBlock.gifExpandedBlockStart.gifCode
#include <stdio.h> 
#include 
<malloc.h> 

typedef 
struct node 

  
int value; 
  
struct node* next; 
}node, 
*node_list; 

void addNode(node_list &l)
{
    node_list temp2 
= l;
    
for (int i = 1; i < 10 ; i++)
    {
       node_list temp 
= (node_list)malloc(sizeof(struct node));
       temp
->next = NULL;
       temp
->value = i;
       
       l
->next = temp;
       l
= l->next;
    }
   l 
= temp2;
}

void main() 

  node_list l; 
  node_list p; 
  
  l 
= (node_list)malloc(sizeof(struct node));
  l
->next = NULL;
  l
->value = 0;
   
  p 
= l;
  addNode(p);
  p 
= l; 
  
while(p!=NULL) 
  { 
     printf(
"%d \n",p->value); 
     p 
= p->next; 
  } 

ContractedBlock.gifExpandedBlockStart.gifCode
#include <stdio.h> 
#include 
<malloc.h> 

typedef 
struct node 

  
int value; 
  
struct node* next; 
}node, 
*node_list; 

node_list addNode(node_list 
&l, int i)
{
    node_list temp 
= (node_list)malloc(sizeof(struct node));
    temp
->next = NULL;
    temp
->value = i;
    l
->next = temp;
    
return temp;
}

void main() 

  node_list l; 
  node_list p, temp; 
  
  l 
= (node_list)malloc(sizeof(struct node));
  l
->next = NULL;
  l
->value = 0;
   
  temp 
= l;

  
for(int i=1;i < 10; i++
  {
      l 
= addNode(l, i);
  }
  p 
= temp; 
  
while(p!=NULL) 
  { 
     printf(
"%d \n",p->value); 
     p 
= p->next; 
  } 

#include <iostream>
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<<"Null ="<<headnode->id<<endl;
     }
     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<<"*******************begin**************"<<endl;
 test head;
    int nodenum = 0 ;
    test *temp = &head;
 test *currentNode = &head; //此处变量相当于中间变量,为链表当前结点位置
 test *before_node = head.next;
 bool ishead = false;

 cout<<"请输入链表结点值:"<<endl;  
 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<<"链表的值为:"<<endl;
 while (temp!= NULL)
 {
  cout<<"temp.id  "<<i<<" = "<< temp->id<<endl;
  temp = temp->next;
  i++;
 }

 /*尾部指针指向头指针*/
    currentNode->next = &head;
   
 cout<<"*******************End**************"<<endl; 
    //before_node = delete_node(&head, before_node);
 //cout<<"new node = "<<before_node->id<<endl;
   
 /*开始选大王*/
    temp = &head;
 i = 0;
 int node_num = 30;
 while (node_num != 1)
 {
  i++;
  if (7 == i)
  {
   cout<<"删除结点为:"<<temp->id<<endl;
   temp = delete_node(&head, temp);
   i = 0;
   node_num--;
  }
  else
      temp = temp->next;
 }
  
 cout<<"最后大王为:"<<temp->id<<endl;
 
    delete [] newnode;        //释放
 return 0;
}

转载于:https://www.cnblogs.com/chengxin1982/archive/2009/03/02/1401129.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值