关于《查找单链表中倒数第N个结点》的程序写法!

N_student 2009-11-18 03:22:49
查找单链表中倒数第N个结点,大家都知道是设置两个指针先指向头结点,第一个指针先走N个next,然后第二个指针才走,这样第一个走到尾了,第二个就是倒数第N个节点。大家看我程序写的对不对?我机器没有C的编译器。。。
C语言不太好,请大家检查语法和程序的错误。


struct node{
int key;
node* next;
};
typedef node* List;
List* find(List* head, int k)
{
if (list == NULL || k <= 0)
{
return NULL; //查找失败。
}
List *p = head;
List *tempList = head;
for(int i=0;i<n;i++)
{
templist=templist->next;
if(NULL==templist) //判断如果tempList结点走过尾了,就查找失败。
return NULL;
}
while(tempList->next != NULL)
{
tempList = tempList->next;
p = p->next;
}
return p;

}
}


谢谢大家!
...全文
234 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
N_student 2009-11-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wizardoz 的回复:]
typedef node* List; 

List已经定义为指针了,所以后面的指针操作都错了。
[/Quote]

那正确的写法是怎样的呢?请指点!
WizardOz 2009-11-19
  • 打赏
  • 举报
回复
typedef node* List;

List已经定义为指针了,所以后面的指针操作都错了。
WizardOz 2009-11-19
  • 打赏
  • 举报
回复
当然不用了,只有插入新节点的时候需要申请内存。
N_student 2009-11-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wizardoz 的回复:]
引用 2 楼 n_student 的回复:
引用 1 楼 wizardoz 的回复:
typedef node* List;

List已经定义为指针了,所以后面的指针操作都错了。


那正确的写法是怎样的呢?请指点!

指点不敢当,说说我的意见吧。
一般是这样
C/C++ code
typedefstruct _Node Node;
typedefstruct _Node List;struct _Node{void* data;
Node* next;
}

List* list_prepend(List* list,void* data){
Node* node;

node= (Node*)malloc(sizeof(Node));
node->data= data;
node->next= list;return node;
}
[/Quote]

我照你的代码改下,有几点疑问:

struct Node{
int key;
node* next;
};
typedef struct Node List; //change point

List* find(List* head, int k)
{
if (NULL==list || k <= 0)
{
return NULL; //查找失败。
}
List *p = head; //这里还用malloc申请内存吗?上面定义List* head,head有头指针,
List *tempList = head;
for(int i=0;i<n;i++)
{
templist=templist->next;
if(NULL==templist) //判断如果tempList结点走过尾了,就查找失败。
return NULL;
}
while(tempList->next != NULL)
{
tempList = tempList->next;
p = p->next;
}
return p;

}
}


注视处:
这里还用malloc申请内存吗?上面定义List* head,head为头指针,直接List *p = head;不行么?
谢谢!
WizardOz 2009-11-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 n_student 的回复:]
引用 1 楼 wizardoz 的回复:
typedef node* List;

List已经定义为指针了,所以后面的指针操作都错了。


那正确的写法是怎样的呢?请指点!
[/Quote]
指点不敢当,说说我的意见吧。
一般是这样

typedef struct _Node Node;
typedef struct _Node List;

struct _Node{
void* data;
Node* next;
}

List* list_prepend(List* list,void* data){
Node* node;

node = (Node*)malloc(sizeof(Node));
node->data = data;
node->next = list;

return node;
}

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧