#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>}
}