您的位置:首页 > 其它

链表问题

2013-04-29 23:04 134 查看

1.有单向链表,其中节点结构为Node{int value;Node *pNext};只知道指向某个节点的指针pCurrent;并且知道该节点不是尾节点,有什么办法把他删除吗?要求不断链.

思路:将
pCurrent->next结点内容拷贝并覆盖掉pCurrent,删除pCurrent->next结点

void DeleteNode(node *pCurr)
{
Assert(pCurr != NULL);
node * pNext = pCurr->next;
if(pNext != NULL)
{
pCurr->next = pNext->next;
pCurr->data = pNex->data;
delete pNext;
}
}




2.有两个单向链表,表头pHeader1,pHeader2,请写一个函数判断这两个链表是否有交叉.如果有交叉,给出交叉点.程序不能改变链表的内容,可以使用额外的空间,时间复杂度尽量小,最好给出两种解.(双重循环的解由于时间复杂度高,不算正解).

思路:
(1)判断是否有交叉:分别遍历两个链表得到表尾p1、p2,如果p1==p2则两个链表有交叉点,否则没有;
(2)求交叉点(如果交叉):分别遍历链表计算两链表长度n1、n2,不妨设n1>=n2,先把pHeader1移动(n1-n2)位,再同步遍历数组,每移一位判断是否同一结点可得出结果。
时间复杂度O(n1+n2)


[title2]

[/title2]

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: