讨论下算法:各说风云吧。
问:一个结点大于1的循环链表,无头结点、头指针,现在有个s指针指向其中的一个结点,要删除其前面结点,怎么做到
[ 本帖最后由 C梦天下 于 2011-5-24 22:01 编辑 ]
root@~ #cat dl.c #include <stdio.h> struct entry { int val; struct entry *next; //后继 struct entry *prev; //前驱 }; int main (void) { struct entry n1,n2,n3,n4,*s=&n4; //定义4个结构变量,指针s指向第四个结点(要删除n3) //定义一些测试数据 n1.val=100; n1.next=&n2; n1.prev=0; n2.val=200; n2.next=&n3; n2.prev=&n1; n3.val=300; n3.next=&n4; n3.prev=&n2; n4.val=400; n4.next=0; n4.prev=&n3; //打印原始数据 printf("Before delete:\n%i\n%i\n%i\n%i\n\n",n1.val,n1.next->val,n2.next->val,n3.next->val); //将s指针指向要删除结点的上一个结点 s->prev->prev->next=s; //打印删除后的链表 printf("After delete:\n"); //定义一个表头,便于遍历 struct entry *h=&n1; while(h) { printf("%i\n",h->val); h=h->next; } return 0; } root@~ #./dl Before delete: 100 200 300 400 After delete: 100 200 400 root@~ #