数据结构与算法学习

链表分为单链,网站空间,双链和循环链表,链表C语言实现:

//单链typedef struct NodeType{  char elem;  NodeType * next;} Node;//双链typedef struct DuobleNodeType{  char elem;  NodeType *next;NodeType *prev; }DoubleNode;

1.单链表反转。

以微软的一道面试题为例,美国空间,香港服务器,编写一个函数,给定一个链表的头指针,要求只遍历一次,将单链表中的元素顺序反转过来。

给出反转函数:

Node* LinkList_reverse(Node* head) {Node *preNode,*curNode,*nextNode;(head->next == NULL) return head;//仅一个元素 curNode = head;preNode=NULL;(curNode){nextNode = curNode->next;//先记录下一个结点 curNode->next = preNode;//改变链表方向(逆置) preNode = curNode;//将当前结点作为下一次循环的前一个结点 curNode = nextNode;//向后推移一个结点 }return preNode;//当遍历完链表后curNode应该为空,此时preNode链表头(head) }

2.链表添加节点

LinkList_Add(Node* ptr,Node* newNode){int temp = 0;newNode->next = ptr->next;ptr->next = newNode;temp = ptr->e;ptr->e = newNode->e;newNode->e = temp;}

3.无头链表删除给定节点

同样以一面试题为例

假设一个没有头指针的单链表,一个指针指向此单链表中间的一个节点(非第一个或最后一个节点),请将该节点删除。

LinkList_Delete(Node* ptr){Node* temp = ptr->next;if(temp != NULL){ptr->e = temp->e;ptr->next = temp->next;delete temp;//这里delete好像有问题,以后再看下 }}

自己要先看得起自己,别人才会看得起你

数据结构与算法学习

相关文章:

你感兴趣的文章:

标签云: