面试题13:在O(1)时间删除链表结点
2013-06-19 12:45
399 查看
题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。
思路:首先要理解题意,容易误以为是删除值为a的结点,结点指针和头指针都是指向同一个链表,操作
1,链表是否含头结点
2,链表只有一个结点,结点指针指向它
3,结点指针指向链尾,需要顺序遍历,找到结点指针的前一个指针才能进行删除,O(n)
4,结点指针不在链尾,O(1),将结点指针下一个指针赋值相同的值,删除结点指针下一个指针有相同的效果。
如果这个链表含头结点,则第2种情况包含在第4种中
源代码
结果
第四种情况
输入链表序列,以0结束:1 2 3 4 5 0
结点指针指向的数据:4
输出删除前的链表:5 4 3 2 1
输出删除后的链表:5 3 2 1
第三种情况
思路:首先要理解题意,容易误以为是删除值为a的结点,结点指针和头指针都是指向同一个链表,操作
1,链表是否含头结点
2,链表只有一个结点,结点指针指向它
3,结点指针指向链尾,需要顺序遍历,找到结点指针的前一个指针才能进行删除,O(n)
4,结点指针不在链尾,O(1),将结点指针下一个指针赋值相同的值,删除结点指针下一个指针有相同的效果。
如果这个链表含头结点,则第2种情况包含在第4种中
源代码
#include "stdio.h" #include "stdlib.h" typedef struct LNode{ int data; struct LNode *next; }LNode,*LinkList; void create_head_list(LinkList &L){ LinkList p; int e; L=(LinkList)malloc(sizeof(LNode)); L->next=NULL; printf("输入链表序列,以0结束:"); scanf("%d",&e); while(e) { p=(LinkList)malloc(sizeof(LNode)); p->data=e; p->next=L->next; L->next=p; scanf("%d",&e); } } //链表含有头结点 void DeleteNode(LinkList &head,LinkList p) { ///if(head->next) LinkList L,q; L=head; if(p->next == NULL) { while(L->next != NULL) { q=L; L=L->next; } q->next=NULL; } else { p->data=p->next->data; q=p->next; p->next=q->next; free(q); } } void list_traverse(LinkList L) { while(L->next!=NULL) { printf("%d ",L->next->data); L=L->next; } } void main() { LinkList L; create_head_list(L); LinkList p; p=L->next->next; printf("结点指针指向的数据:%d",p->data); printf("\n输出删除前的链表:"); list_traverse(L); DeleteNode(L,p); printf("\n输出删除后的链表:"); list_traverse(L); }
结果
第四种情况
输入链表序列,以0结束:1 2 3 4 5 0
结点指针指向的数据:4
输出删除前的链表:5 4 3 2 1
输出删除后的链表:5 3 2 1
第三种情况
输入链表序列,以0结束:4 5 0 结点指针指向的数据:4 输出删除前的链表:5 4 输出删除后的链表:5
相关文章推荐
- 面试题13:在O(1)时间删除链表结点
- 【剑指offer】面试题13、在 O(1)时间上删除链表结点
- 剑指offer--面试题13:在O(1)时间删除链表结点--Java实现
- 剑指Offer之面试题13:在O(1)时间删除链表结点
- 面试题13:在O(1)时间删除链表结点
- 【剑指Offer】面试题13:在O(1)时间删除链表结点
- 面试题13:在O(1)时间内删除链表结点
- 剑指Offer面试题12打印1到最大的n位数,面试题13在O(1)时间删除链表结点
- 【面试题】剑指offer13--在O(1)时间删除链表结点
- 面试题13:在O(1)时间删除链表结点
- 剑指offer 面试题13 在o(1)时间删除链表结点
- 面试题13:在O(1)时间删除链表结点
- 面试题13:在O(1)的时间删除链表结点
- 剑指offer 面试题13:在O(1)时间删除链表结点(C++版)
- 《剑指offer》(面试题13):在O(1)时间删除链表结点
- [剑指offer][面试题13]在O(1)时间删除链表结点
- 【剑指offer 面试题13】在 O(1) 时间删除链表结点
- 【剑指offer】面试题13:在O(1)时间删除出链表结点
- 面试题13:在O(1)时间删除链表结点
- 面试题13 在o(1)时间删除链表的给定结点