链表
文章平均质量分 53
notishell
这个作者很懒,什么都没留下…
展开
-
就地翻转单链表
翻转单链表是比较简单的事情,就像双向链表插入节点一样,关键在于指针的处理,除此之外没有什么值得关注的! #include using namespace std; struct list { int value; struct list *next; }; struct list *insert(struct list *head, int v) { if (head) { he原创 2013-08-08 23:07:08 · 629 阅读 · 0 评论 -
单链表节点删除问题
单链表的节点删除一种保守的做法是从头遍历一遍,然后找到要删除节点的前一个节点,修改next指针,最后释放delete节点。实际上有些情况下可以在O(1)的时间内删除节点! 如果节点指针被引用,那么删除单链表的节点就只能遍历一遍来删除了,否则我们完全可以优化删除算法!设要删除的节点为p,当节点需要维持相对顺序时,将节点p->next的值拷贝到节点p,然后删除节点p->next,如果节点p位于末尾,原创 2013-08-08 23:12:07 · 1069 阅读 · 0 评论 -
输出单链表的倒数第K个节点
求解单链表第K个节点或者倒数第K个节点总是一个O(n)的问题!一般的求解倒数第K个问题是转换为求解第N-K个节点的问题,这样需要求出链表总长N,实际上可以做的更好! 求解倒数第K个节点更好的一种做法是不求解链表长度,使用一个指针指向第K个节点,另一个指针指向第一个节点,两个指针同步移动,当第一个指针移动到末尾,第二个指针就指向倒数第K个节点! #include using namespace原创 2013-08-08 23:08:50 · 683 阅读 · 0 评论 -
单链表有环求长度及相交问题
单链表的节点只有一个指针指向下一个节点,两个单链表相交的话就会导致两个单链表的尾节点是相同的,所以只需要比较尾节点是否相同就可以知道两个单链表是否相交。但是,这样是否就完全没有问题了呢?原创 2013-08-08 22:59:12 · 892 阅读 · 0 评论