问题:
只知道指针P指向一个单向非循环链表的节点,不是头节点也不是尾节点,从链表上把 P指向的节点删除…
思路:
一般的思路是要遍历链表找到节点P的前驱节点, 然后再删掉节点P, 但是这样效率不是很高, 可以换个思路, P节点的后继节点是可以在O(1) 复杂度下得到的, 可以将P的后继节点的数据复制到P节点中, 然后删掉P的后继节点, 重新接链即可…
实现如下:
temp = p->next;
p->data = p->next->data;
p->next = p->next->next;
delete temp;
或者:
temp=p->next;
p->data=temp->data;
p->next=temp->next;
delete temp;
这样就通过复制后面一个节点元素的值和next,然后删除后一个节点的方法,把当前p指向的节点间接地快速删除了
参考的原文连接:
http://blog.csdn.net/cnnumen/article/details/5804438
附加:要在链表中插入节点时,思路很简单,只需要考虑两个问题
1.要插入的节点的next值是什么?
2.要插入的节点的前一个节点是谁?也就是,把哪个节点的next值设置为指向当前待插入节点的指针?
考虑好这两个问题,就能把要插入的节点链接到原来的链表中去了。要注意,一般是先要考虑,先处理待插入节点的next值,否则,可能就会导致它的next值对应的节点的指针找不到了。也就是考虑和处理顺序是先后再前。