Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1435317
  • 博文数量: 241
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 2253
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-11 22:27
个人简介

--

文章分类

全部博文(241)

文章存档

2021年(3)

2019年(6)

2018年(1)

2017年(9)

2016年(21)

2015年(50)

2014年(125)

2013年(26)

我的朋友

分类: C/C++

2014-03-05 15:48:54

题目:
/*
功能:  输入一个不带头节点的单向链表(链表的节点数小于100),删除链表中内容重复的节点(重复的节点全部删除),剩余的节点逆序倒排。  
输入:   pstrIn: 输入一个不带头节点的单向链表   
输出:   pstrOut:删除内容重复的节点后,逆序排列的链表(不带头节点,链表第一个节点的内存已经申请)。   
返回:
示例:
输入链表的内容依次为 6,7,8,8,9,10,6
则输出链表的内容依次应该是 10,9,7
*/
代码:

点击(此处)折叠或打开

  1. #include <stdlib.h>
  2. #include "oj.h"


  3. /*
  4. 功能: 输入一个不带头节点的单向链表(链表的节点数小于100),删除链表中内容重复的节点(重复的节点全部删除),剩余的节点逆序倒排。
  5.     
  6. 输入: pstrIn: 输入一个不带头节点的单向链表
  7.     
  8. 输出: pstrOut:删除内容重复的节点后,逆序排列的链表(不带头节点,链表第一个节点的内存已经申请)
  9.      
  10. 返回:

  11. 示例:
  12. 输入链表的内容依次为 6,7,8,8,9,10,6
  13. 则输出链表的内容依次应该是 10,9,7
  14.      
  15. */
  16. #define N 100
  17. #define REPEAT -256

  18. int iChanProcess(strNode * pstrIn,strNode * pstrOut)
  19. {
  20.     if (NULL == pstrIn || NULL == pstrOut)
  21.     {
  22.         return -1;
  23.     }
  24.     int data[N] = {0};
  25.     int count = 0;
  26.     int i;

  27.     strNode* pFast = pstrIn;
  28.     strNode* pOut = pstrOut;
  29.     while (pFast != NULL)
  30.     {
  31.         for (i=0; i<count; i++)
  32.         {
  33.             if (data[i] == pFast->data)
  34.             {
  35.                 data[i] = REPEAT;
  36.                 pFast = pFast->pstrNext;
  37.                 break;
  38.             }
  39.         }
  40.         if (i < count)
  41.         {
  42.             continue;
  43.         }
  44.         data[count++] = pFast->data;
  45.         pFast = pFast->pstrNext;
  46.     }
  47.     if (count == 0)
  48.     {
  49.         return -1;
  50.     }
  51.     else
  52.     {
  53.         i=0;
  54.         while (--count > 0)
  55.         {
  56.             if (data[count] != REPEAT)
  57.             {
  58.                 if (i == 0)
  59.                 {
  60.                     pOut->data = data[count];
  61.                     pOut->pstrNext = NULL;
  62.                 }
  63.                 else
  64.                 {
  65.                     strNode* tmp = (strNode *)malloc(sizeof(strNode));
  66.                     tmp->data = data[count];
  67.                     tmp->pstrNext = pOut->pstrNext;
  68.                     pOut->pstrNext = tmp;
  69.                     pOut = tmp;
  70.                 }
  71.                 i++;
  72.             }            
  73.         }
  74.     }
  75.     return 0;
  76. }

  77. /* 释放链表 */
  78. void vFreeChan(strNode * pstrChan)
  79. {
  80.     if (NULL == pstrChan)
  81.     {
  82.         return;
  83.     }
  84.     strNode *pNext = pstrChan->pstrNext;
  85.     while (pNext != NULL)
  86.     {
  87.         strNode *tmp = pNext->pstrNext;
  88.         pstrChan->pstrNext = tmp;
  89.         free(pNext);
  90.         pNext = tmp;
  91.     }
  92.     free(pstrChan);
  93.     pstrChan = NULL;
  94.     return;
  95. }


阅读(1019) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~