剑指offer 面试题12 在O(1)时间删除链表节点
2014-08-23 21:58
507 查看
E:\arithmetic\DeleteN1
下一个节点内容挪到要删除节点,删除下个节点,注意头、尾节点的处理,删除的是尾节点时,时间复杂度为O(n)
下一个节点内容挪到要删除节点,删除下个节点,注意头、尾节点的处理,删除的是尾节点时,时间复杂度为O(n)
#include <stdio.h> #include <stdlib.h> typedef struct S_LinkNode{ int value; struct S_LinkNode *next; }LinkNode; void deleteNode(LinkNode **head, LinkNode *Node); void insertNode (LinkNode **head, LinkNode *node); void printfNode(LinkNode *head); int main(int argc, char *argv[]) {//测试用例:头、尾、中间、仅一个! LinkNode *head = NULL; LinkNode *t = NULL; LinkNode *d = NULL; int i; for(i=0 ; i<1 ; i++){ t = (LinkNode*)malloc(sizeof(LinkNode)); t->value = i; t->next = NULL; insertNode(&head, t); if(i == 0) d = t; } printfNode(head); deleteNode(&head, d); printfNode(head); return 0; } void deleteNode(LinkNode **head, LinkNode *node){ if((head == NULL)||(*head == NULL)){ printf("link is null!quit!\n"); } else{ if(node == NULL) return; if(node == *head){ *head = (*head)->next; free(node); return; } LinkNode *t = node->next; if(t != NULL){ node->value = t->value; node->next = t->next; node = t; } else{ t = *head; while((t->next != NULL)&&(t->next != node)) t = t->next; if(t->next == node){ t->next = NULL; } else{ printf("can't find!\n"); return; } } free(node); } } void insertNode (LinkNode **head, LinkNode *node){ if(node == NULL){ return; } LinkNode *h = *head; if(h == NULL){ *head = node; } else{ while(h->next != NULL) h = h->next; h->next = node; } } void printfNode(LinkNode *head){ if(head == NULL) printf("null"); else{ while(head != NULL){ printf("%d\t", head->value); head = head->next; } printf("\n"); } }
相关文章推荐
- 剑指offer面试题13-在O(1)时间删除链表的节点
- 剑指Offer面试题12打印1到最大的n位数,面试题13在O(1)时间删除链表结点
- 剑指offer-面试题13-在O(1)时间删除链表节点
- 剑指Offer面试题13(java版):在O(1)时间删除链表节点
- 剑指offer之面试题13:在O(1)时间删除链表节点
- 剑指Offer :面试题13 在O(1)时间删除链表节点
- 剑指offer--面试题13:在O(1)时间删除链表节点
- 剑指Offer面试题:12.在O(1)时间删除链表结点
- 剑指offer--面试题13:在O(1)时间删除链表结点--Java实现
- 剑指offer-面试题 13:在 O( 1)时间删除链表结点
- LintCode-剑指Offer-(372)在O(1)时间复杂度删除链表节点
- 【剑指offer 面试题13】在 O(1) 时间删除链表结点
- 【剑指offer】面试题13:在O(1)时间删除出链表结点
- 剑指Offer之在O(1)时间删除链表节点
- 剑指offer13-在O(1)时间删除链表节点
- 剑指Offer----面试题13:在O(1)时间删除链表结点
- [剑指offer][面试题13]在O(1)时间删除链表结点
- 剑指Offer之在O(1)时间删除链表节点(题13)
- 【剑指offer】面试题13、在 O(1)时间上删除链表结点
- 剑指offer面试题13——在O(1)时间删除链表结点