无头节点的单循环链表中删除指针s所指结点的前驱结点
2017-03-27 23:03
323 查看
#include <stdio.h> typedef int ElemType; typedef struct { ElemType data; struct LNode *next; }LNode, *CLinkList; void initLink(CLinkList L);//初始化头节点 void createLink(CLinkList L, ElemType *arr, int n);//用长度为n的数组创建链表 void showList(CLinkList L);//输出指定节点之后的所有节点 //返回L后第n个节点(n可超过L的总节点个数) LNode *creLNodePoint(CLinkList L, int n); //删除s的前驱节点 void delPrior(LNode *s); int main() { ElemType data[6] = {1, 2, 3, 8, 4, 5 }; int length = sizeof(data) / sizeof(ElemType); CLinkList L = (CLinkList)malloc(sizeof(CLinkList)); LNode *s; initLink(L); createLink(L, data, length); printf("原链表:\t\t"); showList(L); s = creLNodePoint(L,4);//制作指向循环链表某节点的指针 delPrior(s);//删除s的前驱节点 printf("s指向的数据为%d\n",*s); printf("删除其前驱节点:\t"); showList(L); getchar(); return 0; } void initLink(CLinkList L) { L->data = 0; L->next = L; } void createLink(CLinkList L, ElemType *arr, int n) { LNode *node = NULL; LNode *r = L; int i; r->data = arr[0]; for (i = 1; i < n; i++){ node = (LNode *)malloc(sizeof(LNode)); node->data = arr[i]; node->next = r->next; r->next = node; r = r->next; } } void showList(CLinkList L) { int i; LNode *r = L; while (r->next != L){ printf("%d ", r->data); r = r->next; } printf("%d ", r->data); printf("\n"); } //返回L后第n个节点(n可超过L的总节点个数) LNode *creLNodePoint(CLinkList L, int n) { LNode *s = L; while (n--) { s = s->next; } return s; } //删除s的前驱节点 void delPrior(LNode *s) { LNode *p = s; LNode *r = p; while (p->next != s) { r = p; p = p->next; } r->next = s; free(p); }
相关文章推荐
- 面试题 单向链表(无头结点)一个指针指向其中的一个结点,如何删除这个结点?
- 链表之无头指针删除单链表指定结点
- 假设在长度大于1的循环链表中,即无头结点也无头指针,s为指向链表中的某个结点的指针,试编写算法删除结点s的前驱结点
- 在一个无头指针的单链表中,删除指针p所指向的结点
- 6-2 单链表结点删除(20 分)_单链表的删除节点的两种方式——还是双指针和链表覆盖好用
- 有一个单项的链表,在没有头结点的情况下,只知道有一个指向结点B的指针p,假设这个结点B不是尾结点,删除该节点B。
- 无头节点,删除已知节点的前驱(循环链表)
- 有两个双向循环链表A,B,知道其头指针为:pHeadA,pHeadB,请写一函数将两链表中data值相同的结点删除
- 雅虎面试题─有两个双向循环链表A,B,知道其头指针为:pHeadA,pHeadB,请写一函数将两链表中data值相同的结点删除
- 只知道某个单向链表的中的某个指针,且该指针不是尾指针,如何删除该节点。
- 从无头单链表中删除节点
- 无表头表尾指针的单链表删除节点
- 【编程之美】读书笔记:从无头单链表中删除结点
- 编程之美:从无头单链表中删除节点
- 雅虎面试题─有两个双向循环链表A,B,知道其头指针为:pHeadA,pHeadB,请写一函数将两链表中data值相同的结点删除
- 从无头单链表中删除节点
- 给定链表的头指针和一个结点指针,在O(1) 时间删除该结点
- 给定链表的头指针和一个结点指针,在O(1)时间删除该结点
- 从无头单链表中删除节点
- 从无头单链表中删除节点