最近看到一道面试题,意思大概是,不知道链表头节点,删除某个节点,做法也很简单,就是把下个节点的值拷贝到下个节点。删除下个节点,但是如果要删除的节点是最后一个节点那该如何去办?
你说的做法本身就是错的。
删除节点,应该是把这个节点的后继节点设置为这个节点的前驱结点的后继节点。
如果删除的是最后一个节点,那么将这个节点的前驱结点(也就是倒数第二个节点)的后继节点设置为null。
你这道题要考的应该是如何用一种通用的做法来删除一个链表中德节点,而无需区分head节点和普通节点,从这个思路出发再想想。
这篇文章提供了一种解决方案,你可以参考:http://blog.csdn.net/jasonchen_gbd/article/details/45276629
先还原一下这道题的要求:
有一个链表 a->b->c->d->NULL,你不知道头节点而只知道指向c的节点,问如何删除c节点。
楼主说的方法是对的,然后如果是最后一个节点其实思路也一样,假设现在指向的是d节点那么只要复制d节点和下一节点的值就行,但是判断到下一节点为NULL
那么这个时候把d节点的整个节点赋值为NULL就行,只要在你的思路上加上对节点为NULL的判断即可
if(c->next!=NULL)
c=c->next;
else
c=NULL