Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103415
  • 博文数量: 34
  • 博客积分: 30
  • 博客等级: 民兵
  • 技术积分: 217
  • 用 户 组: 普通用户
  • 注册时间: 2013-01-10 23:36
文章分类
文章存档

2013年(34)

我的朋友

分类: C/C++

2013-04-21 23:10:33


1.Write a method which can remove the same unit from a Array which has been sorted.

//在排序好的数组中移除相同的元素
复制代码
0);
if(n==0) return temp;

//第3步:如果需要恢复,执行第1步中的代码

思路2:不管是顺数n个还是倒数n个,其实都是距离-标尺问题。
标尺是一段距离可以用线段的两个端点来衡量,我们能够判断倒数第一个节点,因为他的next==NULL。
如果我们用两个指针,并保持他们的距离为n,那么当这个线段的右端指向末尾节点时,左端节点就指向倒数第n个节点。
真是进了一大步,这个思路的算法时间复杂度为O(n).代码大致像这样:

//第1步:建立标尺
LinkNode *pLeft,*pRight;
pLeft=pRight=root;
while(n-->0) pRight=pRight->next;

//第2步:让标尺向右移动,直到右端指向末尾.左端即结果
while(pRight->next != NULL){
   pLeft = pLeft->next;
   pRight = pRight->next;
}
return pLeft;

思路3:偷懒最省事的办法!让单链表有一个头节点,并在头节点中保存该单向列表的节点数目。
这个思路的时间复杂度最小,只跟参数n有关系.代码大致为:

//第1步:计算顺数的位置
int reN = count-n;

//第2步:向右移动reN的节点即是.
LinkNode * temp=root;
while(reN-->0) temp = temp->next;

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