链表反序(C#版)

有次看见别人的面试题问起链表反序.自己实验下.
ContractedBlock.gif ExpandedBlockStart.gif Code
 1    public class Node<T> : ICloneable
 2ExpandedBlockStart.gifContractedBlock.gif    {
 3ExpandedSubBlockStart.gifContractedSubBlock.gif        public T Data getset; }
 4
 5ExpandedSubBlockStart.gifContractedSubBlock.gif        public Node<T> Next getset; }
 6ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
 7        /// 在遍历当前链表时,把遍历的当前节点赋给新的节点,新的节点会记录当前数据,加进新链表的前头,算法为O(N)次.
 8        /// </summary>
 9        /// <param name="node"></param>
10        /// <returns></returns>

11        public static Node<T> reverse(Node<T> node)
12ExpandedSubBlockStart.gifContractedSubBlock.gif        {
13            Node<T> head = null;
14            while (node != null)
15ExpandedSubBlockStart.gifContractedSubBlock.gif            {
16                Node<T> newNode = new Node<T>();
17                //设置新节点的数据为当前的节点的数据,并连接head
18                newNode.Data = node.Data;
19                newNode.Next = head;
20                //head记录头节点
21                head = newNode;
22
23                //遍历下一个节点
24                node = node.Next;                            
25            }

26            return head;
27        }

28        public object Clone()
29ExpandedSubBlockStart.gifContractedSubBlock.gif        {
30            Node<T> newnode = new Node<T>();
31            newnode.Data = this.Data;
32            return newnode;
33        }

34    }

 在主程序下:

ContractedBlock.gif ExpandedBlockStart.gif Code
 1        static void Test1()
 2ExpandedBlockStart.gifContractedBlock.gif        {           
 3ExpandedSubBlockStart.gifContractedSubBlock.gif            Node<string> s6 = new Node<string> { Data="6"};
 4ExpandedSubBlockStart.gifContractedSubBlock.gif            Node<string> s5 = new Node<string> { Data = "5", Next = s6 };
 5ExpandedSubBlockStart.gifContractedSubBlock.gif            Node<string> s4 = new Node<string> { Data = "4", Next = s5 };
 6ExpandedSubBlockStart.gifContractedSubBlock.gif            Node<string> s3 = new Node<string> { Data = "3", Next = s4 };
 7ExpandedSubBlockStart.gifContractedSubBlock.gif            Node<string> s2 = new Node<string> { Data = "2", Next = s3 };
 8ExpandedSubBlockStart.gifContractedSubBlock.gif            Node<string> s1 = new Node<string> { Data = "1", Next = s2 };
 9
10            Node<string> head = Node<string>.reverse(s1);
11            
12
13            while (head != null)
14ExpandedSubBlockStart.gifContractedSubBlock.gif            {
15                Console.Write(head.Data);
16                head = head.Next;
17            }

18            Console.Read();
19        }

十进制与别的进制相互转化:

        ///   <summary>
        
///  把相关十进制整数转成x进制
        
///   </summary>
        
///   <param name="i"> 十进制整数 </param>
        
///   <param name="x"> x进制 </param>
        
///   <returns></returns>
         public  int DOI( int i,  int x)
        {         
             int result =  0;
             int j =  0;
             while (i >  0)
            {                
                result += ( int)Math.Pow( 10,j)*(i % x);
                i = i / x;
                j++;
            }
             return result;
        }
         ///   <summary>
        
///  把相关x进制整数转成十进制
        
///   </summary>
        
///   <param name="i"> x进制整数 </param>
        
///   <param name="x"> x进制 </param>
        
///   <returns></returns>
         public  int IOD( int i,  int x)
        {
             int result =  0;
             int j =  0;
             while (i >  0)
            {
                result += ( int)Math.Pow(x, j) * (i %  10);
                i = i /  10;
                j++;
            }
             return result;
        }
         ///   <summary>
        
///  根据上面二段推出x进制的数转成y进制
        
///   </summary>
        
///   <param name="i"></param>
        
///   <param name="x"></param>
        
///   <param name="y"></param>
        
///   <returns></returns>
         public  int IOI( int i,  int x,  int y)
        {
             int result =  0;
             int j =  0;
             while (i >  0)
            {
                result += ( int)Math.Pow(x, j) * (i % y);
                i = i / y;
                j++;
            }
             return result;

        } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值