删除链表节点

来源:互联网 发布:淘宝网如何开网店 编辑:程序博客网 时间: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
原创粉丝点击