数据结构结点的一点小问题,帮忙解释一下(有点罗唆)

来源:百度知道 编辑:UC知道 时间:2024/05/29 23:14:06
template<class ElemType> class ListNode
{
private:
ListNode<ElemType> *Next; //指向下一结点的指针. 凭啥他取名Next,->Next就指向下一结点啊?? ->不是等价于先*后.操作的吗,该怎样解释
ElemType Element; //结点数据
public:
ListNode (const ElemType &E, ListNode<ElemType> *N =NULL) : Element(E),Next(N){ } // NULL是个什么东西,是内置类型,专门指明是空吗?
ListNode() : Next(NULL) {}
~ListNode() {}
};
还有一个插入结点的问题,先谢谢了啊^_^
current->Next = new ListNode(x, current -> Next); //帮忙解释分析一下,人笨,没能理解

Next只是一个取名啊,你自己可以随便取什么名字的.你取Pre都可以...只是这样取名字更直观一些.光看到这个变量而不看构造函数的话你可能不知道为什么,如果你看看构造函数参数表第二个参数(ListNode<Elem Type> *N = NULL),这是一个指向ListNode类型的指针,默认赋值为NULL,NULL就是空指针的意思(顺便回答你的第二个问题),这是系统指定的一个默认地址,代表你什么东西都没有指向.如果你构造函数没有第二个参数输入的话,系统就认为你指向NULL,就是什么也没有指向.同时注意看构造函数":"后面初始化了两个成员变量,其中第二个是Next(N), 表明用N来初始化你的Next,这下应该明白了吧.

current->Next = new ListNode(x, current -> Next);这条语句的意思是用x和current->Next作为参数构造一个新的结点,其中x赋值给Element,current->Next赋值给Next,同时把这个结点赋给current->Next,这个时候原来的current->Next的值就被这个新的值取代了.比如,你原来current存的值是1,current->Next是NULL(因为你下一个结点还没有创建呢),这条语句就是创建一个新的结点,假设x=2,这样你就创建了一个新的结点,存的值为2,指向原来的current->Next(注意是NULL),同时把它赋值给current->Next(注意这个current是存1那个结点),这样的结果就是原来那个结点的Next指向这个新建的存有2的结点.

希望我讲得还算明白,感觉讲得过绕了...