template<class T>
LinkList<T>::LinkList(const LinkList<T> &L)
{
if (NULL == L._head) _head == NULL;
LNode<T> *pt = _head = new LNode<T>();
LNode<T> *pl = L._head;
pt->date = pl->date;
while (pl->next)
{
pt = pt->next = new LNode<T>();
pl = pl->next;
pt->date = pl->date;
}
_len = L._len;
}
这是刚刚写的一个链表的复制构造函数的代码…
貌似能正确执行,但总觉得不是那么好看,大家有没有什么更好的方法呢?
9 个解决方案
#1
这样不挺好的吗
#2
没有必要把数据复制过来啊 直接把链表的首地址付给你的头指针_head就可以了
#3
LZ要的是深拷贝还是浅拷贝?
深拷贝的话也就这样了,不过最好先对原来的链表进行一个环路的检测,否则可能出现死循环.
深拷贝的话也就这样了,不过最好先对原来的链表进行一个环路的检测,否则可能出现死循环.
#4
可是我在构造函数中用的new啊…
#5
环路检测?看尾指针是否为NULL?具体说一下好么?
#6
如果存在环路的话,象while这种循环会永远走不到头的,因此需要环路检测
方法是用快慢2个指针p1\p2,p1每次走1步,p2每次走2步,如果p1 p2相遇,则证明有环路,如果p2走到了null,则没有环路,
方法是用快慢2个指针p1\p2,p1每次走1步,p2每次走2步,如果p1 p2相遇,则证明有环路,如果p2走到了null,则没有环路,
#7
如果存在环路
while (pl->next)
是结束不了的,会一直循环...
while (pl->next)
是结束不了的,会一直循环...
#8
没太明白你的意思,如果单链表中元素数目为奇数,那么p2走到null以后是否还需要跳一个位置,如何设置效验条件?实现代码可以给一下么?就要环路检测这一块的就好,谢谢。
#9
网上关于环路检测的文章很多,相信LZ一看就会明白的!
#1
这样不挺好的吗
#2
没有必要把数据复制过来啊 直接把链表的首地址付给你的头指针_head就可以了
#3
LZ要的是深拷贝还是浅拷贝?
深拷贝的话也就这样了,不过最好先对原来的链表进行一个环路的检测,否则可能出现死循环.
深拷贝的话也就这样了,不过最好先对原来的链表进行一个环路的检测,否则可能出现死循环.
#4
可是我在构造函数中用的new啊…
#5
环路检测?看尾指针是否为NULL?具体说一下好么?
#6
如果存在环路的话,象while这种循环会永远走不到头的,因此需要环路检测
方法是用快慢2个指针p1\p2,p1每次走1步,p2每次走2步,如果p1 p2相遇,则证明有环路,如果p2走到了null,则没有环路,
方法是用快慢2个指针p1\p2,p1每次走1步,p2每次走2步,如果p1 p2相遇,则证明有环路,如果p2走到了null,则没有环路,
#7
如果存在环路
while (pl->next)
是结束不了的,会一直循环...
while (pl->next)
是结束不了的,会一直循环...
#8
没太明白你的意思,如果单链表中元素数目为奇数,那么p2走到null以后是否还需要跳一个位置,如何设置效验条件?实现代码可以给一下么?就要环路检测这一块的就好,谢谢。
#9
网上关于环路检测的文章很多,相信LZ一看就会明白的!