面试题13—在O(1)时间删除链表结点

来源:互联网 发布:java是后端吗 编辑:程序博客网 时间:2024/06/03 20:50

题目:给定单链表的头指针和一个结点指针,在O(1)时间删除该结点。

代码示例:

#include<iostream>using namespace std;template < typename T >struct Node{T data;Node *next;};template < typename T >class LinkList{Node<T> *head;public:LinkList(){head = new Node<T>();head->next = NULL;}~LinkList();void CreateList(T a[], int n);void Disp(void);void DeleteOneNode(Node<T> *node);Node<T> *GetOneNode(int index);//得到编号为index的结点};template<typename T>LinkList<T>::~LinkList(){Node<T> *pre = head;Node<T> *p = head->next;while (p){delete pre;pre = p;p = p->next;}delete pre;}template<typename T>void LinkList<T>::CreateList(T a[], int n){Node<T> *p = head;for (int i = 0; i < n; i++){Node<T> *q = new Node<T>();q->data = a[i];p->next = q;p = q;}p->next = NULL;}template<typename T>void LinkList<T>::Disp(){Node<T> *p = head->next;while (p != NULL){cout << p->data << " ";p = p->next;}cout << endl;}template<typename T>void LinkList<T>::DeleteOneNode(Node<T> *node){//===if (head->next == NULL)return;//===if (node->next == NULL){Node<T> *p = head;while (p->next != node)p = p->next;delete node;p->next = NULL;return;}//===Node<T> *p = node->next;node->data = p->data;node->next = p->next;delete p;}template<typename T>Node<T> *LinkList<T>::GetOneNode(int index){Node<T> *p = head;if (index == 0)return p;for (int i = 0; i < index; i++){p = p->next;}return p;}void main(){const int n = 3;int a[n] = { 5,6,9 };LinkList<int> list;list.CreateList(a, n);list.Disp();//===int index = 1;Node<int>*p = list.GetOneNode(index);list.DeleteOneNode(p);list.Disp();}


阅读全文
0 0
原创粉丝点击