讨论下算法:各说风云吧。
问:一个结点大于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@~ #
