每天一道算法题7 查找链表中倒数第k个结点 ; 输入一个单向链表。如果该链表的结点数为奇数,输出中间的结点;如果链表结点数为偶数,输出中间两个结点前面的一个
2010-12-02 11:30
1166 查看
typedef struct list_node{
int i;
list_node *next;
}LIST_NODE;
LIST_NODE *find_node(LIST_NODE *head, int k)
{
LIST_NODE *p1 = head;
int count = 0;
while(p1 && count++ < k)
p1 = p1->next;
if (!p1)
{
return NULL;
}
LIST_NODE *p2 = head;
while(p1 && p1->next)
{
p1 = p1->next;
p2 = p2->next;
}
return p2;
}
LIST_NODE *find_node(LIST_NODE *head)
{
LIST_NODE *p1, *p2;
if (head == NULL || head->next == NULL)
{
return head;
}
p1 = head;
p2 = head->next;
while(p2->next && p2->next->next)
{
p2 = p2->next->next;
p1 = p1->next;
}
if (p2->next)
{
return p1->next;
}
return p1;
}
int _tmain(int argc, _TCHAR* argv[])
{
LIST_NODE *head = new LIST_NODE;
head->i = 0;
LIST_NODE *temp = head;
for (int j = 0; j < 11; j++)
{
LIST_NODE *p = new LIST_NODE;
p->i = ++j;
temp->next = p;
temp = p;
}
temp->next = NULL;
for (LIST_NODE *temp = head; temp; temp = temp->next)
{
cout << " " << temp->i << " ";
}
LIST_NODE *temp2 = find_node(head);
if(temp2)
cout << "/n" << temp2->i << endl;
system("pause");
return 0;
}
int i;
list_node *next;
}LIST_NODE;
LIST_NODE *find_node(LIST_NODE *head, int k)
{
LIST_NODE *p1 = head;
int count = 0;
while(p1 && count++ < k)
p1 = p1->next;
if (!p1)
{
return NULL;
}
LIST_NODE *p2 = head;
while(p1 && p1->next)
{
p1 = p1->next;
p2 = p2->next;
}
return p2;
}
LIST_NODE *find_node(LIST_NODE *head)
{
LIST_NODE *p1, *p2;
if (head == NULL || head->next == NULL)
{
return head;
}
p1 = head;
p2 = head->next;
while(p2->next && p2->next->next)
{
p2 = p2->next->next;
p1 = p1->next;
}
if (p2->next)
{
return p1->next;
}
return p1;
}
int _tmain(int argc, _TCHAR* argv[])
{
LIST_NODE *head = new LIST_NODE;
head->i = 0;
LIST_NODE *temp = head;
for (int j = 0; j < 11; j++)
{
LIST_NODE *p = new LIST_NODE;
p->i = ++j;
temp->next = p;
temp = p;
}
temp->next = NULL;
for (LIST_NODE *temp = head; temp; temp = temp->next)
{
cout << " " << temp->i << " ";
}
LIST_NODE *temp2 = find_node(head);
if(temp2)
cout << "/n" << temp2->i << endl;
system("pause");
return 0;
}
相关文章推荐
- 每天学习一算法系列(13) (输入一个单向链表,输出该链表中倒数第k个结点)
- 微软算法100道题------输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针
- 数据结构——算法之(004)(输入一个单向链表,输出该链表中倒数第k个结点)
- 输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第0个结点为链表的尾指针
- 输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表 的尾指针
- 输入一个单向链表,输出该链表中倒数第k个结点
- 输入一个单向链表,输出该链表中倒数第k个结点
- 13、输入一个单向链表,输出该链表中倒数第k个结点
- 将数组的奇数移到前面偶数到后面&&输出链表的倒数第k个结点
- 11. 微软面试题:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针
- 今天开始学Java 输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第1个结点为链表的尾指针。
- 单链表的创建(头插尾插),表长,输出,插入,删除,查找,逆置,分解长两个链表(奇数偶数链表),查找倒数第k个元素,产出相同元素
- 面试题:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。
- 13.输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针
- 输入一个单向链表,输出该链表中倒数第k个结点
- 输入一个单向链表,输出其倒数第k个结点
- 微软100题13题(输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针)
- 输入一个单向链表,输出该链表中倒数第k个结点
- 输入一个单向链表,输出该链表中倒数第K个结点
- 输入一个单向链表,输出该链表中倒数第k个结点