删除链表节点
来源:互联网 发布:淘宝网如何开网店 编辑:程序博客网 时间:2024/06/10 17:16
#include <stdio.h>//有头结点的情况typedef struct Node{ int data; struct Node* next; }; //尾插 void create(struct Node* head){ //p是工作指针 struct Node* p = head; int i; for(i = 1; i<=1; i++){ p->next = malloc(sizeof(struct Node)); p->next->value = i; p->next->next = null; p = p->next; } } void print(struct Node* head){ struct Node* p = head->next; while(p){ printf("%d\t",p->value); p = p->next; } printf("\n"); } //时间复杂度O(n)int deleteNode(Node *head,Node *x){struct Node *p = head->next;struct Node *pre = head;while(p) {if(p->data==x->data) {pre->next = p->next;free(p);return 1;}else {pre = p;}p = p->next;}return 0;}//倒置void rev(Node *head) {f(head->next!=null) {struct Node *p = head->next->next;struct Node *pre = head->next;struct Node *temp;pre->next = null;while(p) {temp = p;p = p->next; temp->next = pre;pre = temp;}head->next = pre;}}//没头结点的情况 struct Node{ int value; struct Node* next; }; //头插 struct Node* create(){ struct Node* head = null; int i; for(i = 1; i<=10; i++){ if(head == null){ head = malloc(sizeof(struct Node)); head->value = i; head->next = null; }else{ struct Node* p = malloc(sizeof(struct Node)); p->value = i; p->next = head->next; head->next = p; } } return head; } void print(struct Node* head){ struct Node* p = head; while(p){ printf("%d\t",p->value); p = p->next; } printf("\n"); } //这里注意想要改变head的指向,必须传head的引用,所以是Node**int deleteNode(Node *x Node **head){struct Node *p = head struct Node *pre = head;struct Node *temp;//删除第一个节点需要特殊处理if((*head)-data==x->data){(*head) = (*head)->next;free(head);return 1;}//不是第一个节点while(p) {if(p->data==x->data) {pre->next = p->next;free(p);return 1;}else {pre = p;}p = p->next;}return 0;}//时间复杂度为O(1).删除节点。int deleteNode(Node *x,Node *head) {struct Node *p = x ;//删除不是尾节点if(p->next!=null) {p = x->next;x->data = p->data;x->next = p->next;free(p);return 1;}else {//删除的是尾节点p = head;while (p->next->data!=x->data){p = p->next;}p->next = null;free(x);return 1;}return 0;}
</pre><pre code_snippet_id="648132" snippet_file_name="blog_20150420_3_6675778" name="code" class="java"><pre name="code" class="java"><pre name="code" class="java">void deleteNode(int data,Node *head) {<span style="white-space:pre"></span>Node *p = head; <span style="white-space:pre"></span>while(p!=null) {<span style="white-space:pre"></span>//删除不是尾节点<span style="white-space:pre"></span>if(p->data==data && p->next!=null) { <span style="white-space:pre"></span>Node *x = p->next;<span style="white-space:pre"></span>p->data = x->data;<span style="white-space:pre"></span><span style="white-space:pre"></span>p->next = x->next;<span style="white-space:pre"></span>}else{<span style="white-space:pre"></span>//删除尾节点<span style="white-space:pre"></span>delete p;<span style="white-space:pre"></span>p = null;<span style="white-space:pre"></span>}<span style="white-space:pre"></span>p = p->next;<span style="white-space:pre"></span>}}
0 0
- 删除链表节点
- 删除链表节点
- 删除链表节点
- 删除链表节点
- 链表删除节点
- 双向链表 删除节点 插入节点
- 如何删除链表节点
- 单向链表删除节点
- 如何删除链表节点
- 单向链表删除节点
- 单向链表删除节点
- 删除指定链表节点
- 链表给定节点删除
- 双向链表删除节点
- 删除链表中间节点
- 删除链表中间节点
- 单向链表删除节点
- 删除链表重复节点
- Hummer Time Series DB 数据存储模型
- openoffice在tab标签下的展示问题
- 【Tech-JspWiki】JspWiki安装配置篇
- 设置Android默认壁纸为动态壁纸
- 百度竞价推广之关键词的选择策略
- 删除链表节点
- 初学者kettle使用的总结
- Flex实例一(实现左右多选框的拖拽、点击选择,双击选择,左右互选)
- 【VC++深入详解学习日志】转换问题——P165
- 多线程经典面试题
- 嵌入式C编程规范
- Python单元测试框架unittest
- Unique Paths II--LeetCode
- globe和scene控件中使用鼠标中键进行缩放的实现代码