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.
//第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;