给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点
2014-06-27 15:37
531 查看
#include <iostream> #include <string.h> #include <stdlib.h> #include <stack> using namespace std; struct Node { int data; struct Node* next; }; struct Node* create_list(int len) { if (len <= 0) return NULL; struct Node* head; struct Node* tmp; struct Node* pre; for (int i=0; i<len; i++) { if (i == 0) { head = tmp = new struct Node; cin >> tmp->data; tmp->next = NULL; pre = tmp; continue; } tmp = new struct Node; cin >> tmp->data; tmp->next = NULL; pre->next = tmp; pre = tmp; } return head; } void visit(const struct Node *head) { if (head == NULL) return; const struct Node *tmp; tmp = head; while (tmp) { cout << tmp->data; tmp = tmp->next; } } void free_list(struct Node *head) { if (head == NULL) return; struct Node *tmp; while (head) { tmp = head; head = head->next; delete tmp; } } struct Node* DeleteNode(struct Node *head, struct Node *toDeleteNode) { if (!head || !toDeleteNode) return NULL; struct Node* tmp = head->next; struct Node* pre = head; if (head == toDeleteNode) { delete head; return tmp; } //要删除的结点不是尾结点 if (toDeleteNode->next) { int tmpData = toDeleteNode->data; toDeleteNode->data = (toDeleteNode->next)->data; (toDeleteNode->next)->data = tmpData; tmp = toDeleteNode->next; toDeleteNode->next = (toDeleteNode->next)->next; delete tmp; return head; } //不止一个结点,要删除的结点是尾结点 while (tmp->next) { tmp = tmp->next; pre = pre->next; } pre->next = NULL; delete tmp; return head; } int main() { struct Node *head = create_list(5); visit(head); cout << endl; //删除头结点 head = DeleteNode(head, head); visit(head); cout << endl; //删除尾结点 struct Node* tmp = head; while (tmp->next) tmp = tmp->next; head = DeleteNode(head, tmp); visit(head); cout << endl; //删除第2个结点 int num = 0; tmp = head; while (tmp->next) { num++; if (num == 2) break; tmp = tmp->next; } head = DeleteNode(head, tmp); visit(head); cout << endl; free_list(head); return 0; }
相关文章推荐
- 13\给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点,
- 题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。
- 题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。
- 给定链表的头指针和一个结点指针,在O(1)时间删除该结点
- 给定链表的头指针和一个结点指针,在O(1)时间删除该结点。
- 给定单链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该节点
- 给定链表的头指针和一个结点指针,在O(1) 时间删除该结点
- 给定链表的头指针和一个结点指针,在O(1)时间删除该结点
- 给定链表的头指针和一个结点指针,在O(1) 时间删除该结点
- O(1)时间删除单向循环链表给定结点
- 给定一个单向链表,目前已经有一个指针,指向某一个节点(记作A),现在要删除这个节点A,如何操作。
- 设一个没有头结点指针的单链表。一个指针指向此单链表中间的一个结点(不是第一个,也不是最后一个结点),将该结点从单链表中删除,要求时间复杂度O(1)。
- 面试题 单向链表(无头结点)一个指针指向其中的一个结点,如何删除这个结点?
- LinkLists 删除链表中的一个给定指针的结点 @CareerCup
- 面试题13 在o(1)时间删除链表的给定结点
- 给定一个单向链表(长度未知),请设计一个既节省时间又节省空间的算法来找出该链表中的倒数第m个元素。实现这个算法,并为可能出现的特例情况安排好处理措施。“倒数第m个元素”是这样规定的:当m=0时,链表的
- 给定一个节点指针 删除单链中当前结点
- 给定链表中间某结点指针,删除链表中该结点
- 一个单向链表,只知道某个节点的指针p,但是p不是尾节点,请编程删除节点p.
- 有两个双向循环链表A,B,知道其头指针为:pHeadA,pHeadB,请写一函数将两链表中data值相同的结点删除