不带头指针的单向链表

来源:百度知道 编辑:UC知道 时间:2024/06/18 00:24:19
请编写代码实现(C):
一个不带头指针的单向链表。一个指针指向其中间的一节点(不包括首尾节点),用C语言实现:删除该节点。
首先要判断该指针是否指向首尾节点,特别是如何判断只向首节点,然后如何访问该节点的前面节点。

void removeN(link L,int item)
{
link x,y;
for(y=x=L;x;y=x,x=x->next)
if(item==x->item) break;//定位要删除的结点的位置
y->next=x->next;
free(x);
}

这样一个链表:
struct List
{
int data;
struct List *right
};
typedef struct List *Node;

定义一个删除节点的函数,参数是首节点,和一个data,返回值是首节点:
Node DelNode(Node L, int x);

你可以这样在mian中调用:
假设你要删除data值为10的节点:
list = DelNode(list, 10);

下面是函数内容:(现在写的,没调试,不敢保证正确,你可以试试,我把在首节点的情况也写进去)
Node DelNode(Node L, int x)
{
if (L == NULL){return L;}//空链表

Node p1=L;
Node p2=L;

if(p2->data == x)//在头节点
{
free(p2);//释放节点空间
p2 = NULL;
return L;
}

//下面循环开始遍历查找节点
//是不是尾节点不影响
while(p1->next != NULL)
{
if (p1->next->data == x)
{
p2 = p1->next;//即将要删除p2节点
p1 ->