zoukankan      html  css  js  c++  java
  • PAT-1097(Depulication on a Linked List)

      题目见这里

       分析:实际上是静态链表的应用,只不过要删除的结点链接成一个新的Removed List

    //静态链表
    #include <stdio.h> 
    #define KEYMAX 10005
    #define MAXADDRESS 100005
    
    typedef struct{
    	int data; 
    	int next; //下一个元素的下标 
    }SLinkList;
    
    int n,kHead,rHead;
    SLinkList sLinkList[MAXADDRESS];
    int flag[KEYMAX];
    
    int Transform(char *address){
    	if(address[0]=='-') return -1;//仅-1为负数
    	int p,i;
    	p=0,i=0;
    	while(address[i]){
    		p = 10*p+address[i]-'0';
    		i ++;
    	}
    	return p;
    }
    
    void Read(){
    	char address[6],next[6];
    	int data,p;
    	scanf("%s%d",address,&n);
    	getchar();
    	kHead = Transform(address);
    	while(n--){
    		scanf("%s%d%s",address,&data,next);
    		p = Transform(address);
    		sLinkList[p].data = data;
    		sLinkList[p].next = Transform(next);
    	}
    }
    
    void DeDuplication(){
    	int prior,next,q,data,i=1;
    	prior = next = kHead;
    	while(next!=-1){
    		data = sLinkList[next].data;
    		if(data<0) data = -data;
    		if(flag[data]){
    			//删除结点 
    			sLinkList[prior].next = sLinkList[next].next;
    			if(i==1){
    				rHead = next;
    				q = rHead;
    				sLinkList[q].next = -1;
    				i ++;
    			}
    			else{
    				sLinkList[q].next = next;
    				sLinkList[next].next = -1;
    				q = next;
    			}
    			//next结点链接到rHead所在链表之后再更新next 
    			next = sLinkList[prior].next; 
    		}
    		else{
    			flag[data] = 1;
    			prior = next;
    			next = sLinkList[next].next;
    		}
    	}
    }
    
    void OutPut(int head){
    	int p = head;
    	if(p==-1) return; //removed list可能为空 
    	do{
    		printf("%05d %d ",p,sLinkList[p].data);
    		if(sLinkList[p].next!=-1)
    			printf("%05d
    ",sLinkList[p].next);
    		else printf("-1
    ");  
    		p = sLinkList[p].next;
    	}while(p!=-1);
    }
    
    int main(){
    //	freopen("Data.txt","r",stdin); 
    	kHead = rHead = -1;
    	Read();
    //	OutPut(kHead);
    //	puts("~~~分界线~~~");
    	DeDuplication();
    	OutPut(kHead);
    	OutPut(rHead);
    	return 0;
    }
    

     

  • 相关阅读:
    GridView编辑删除取消完整代码
    添加删除组件里没有IIS
    关于网站开发中存在的问题
    网络公司网站源码介绍Version1.0
    IIS 状态代码
    收藏常用的快捷方式
    连接池已经满的解决方案
    Do you choose a experienced employee with highsalary or a inexperienced employee with lowsalary?
    Registered Permanent residence/attitude for sports
    数据缓存依赖
  • 原文地址:https://www.cnblogs.com/emptyCoder/p/7132776.html
Copyright © 2011-2022 走看看