链表编程方法

今天去 面试了,那位员工也退瞧不起人了,我都工作两年了,什么叫我没写过代码

编程题目,我的编程思路已经写的很清晰了,他看都不看一眼,也不管个午饭,白等了一天!

一些低级的,软件公司,经常会让大家做链表题目,其实链表题目没什么大不了的,

 

了解STL的 程序员们都知道, 关于List 和 Vector的操作,STL 都会提供一个 适配后的 迭代器,

 

我们在编写代码的时候,对于任何链表,或者 数组排序的题目,学会使用 游标,迭代的思想就可以了,

 

那么这类题目就没什么难度了!!!

 

 

题目: 请将一个链表逆序输出,若是循环链表,这输出失败。

 

 

编程思路:

                 1. 创建一个空的链表p1, 逐个逆序插入目标链表的每一个节点

                       2. 在插入p1之前,遍历p1链表,是否已存在该节点,

             若存在,则表示是循环链表,否则,将p1 输出即可

 

            判断存在的条件,比较两个节点的地址值

 

我已经把思路写得这么清晰了,为什么,还说我不会写代码,代码真的那么重要么?

 

我们要做的是,用代码表达人的思想,不是用思想来表达代码,所以语言真的有那么重要么?????

 

 

typedef struct Node{
	int value;
	Node* next;
}   *pNode;



pNode Reverse(pNode list){
	pNode  pNodeout=NULL;
	pNode  pCursor=NULL;
	
	pCursor=list;
	bool b_cycle=false;

	while(!b_cycle && pCursor!=NULL)
	{
		pNode pTemp=pCursor;
		pCursor=pCursor.next;
		
		if(ExistNode(pTemp,pNodeout))
			b_cycle=true;
		else
		{
			pTemp.next=pNodeout;
			pNodeout=pTemp;		
		}
	}
	
	if(b_cycle)
		return NULL;
	else
		return pNodeout;
}


Bool ExistNode(pNode node,pNode list){
		
		pNode pCursor=list;
		
		while(pCursor!=NULL){
			if(node == pCursor)
				return true;
			else
				pCursor=pCursor.next;
		}
		
		return false;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值