zoukankan      html  css  js  c++  java
  • 找到单向链表的倒数第k个节点

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    /*
    找到⼀个未知长度单链表的倒数第K个节点。
    提示:
    head—>1—>2—>3—>4—>5—>6—>7—>8—>9—>10—>NULL
    其中倒数第0个节点是NULL,倒数第1个节点是10,倒数第10个节点是1.
    */
    //第一种方法:先遍历一遍,然后计算链表的长度
    //           然后使用指针跳动
    //第二中方法:使用两个指针,第二个指针跳k下,然后和第一个指针一起跳,直到第二个指针指向NULL,
    //           第一个指针指的就是倒数第k个节点
    typedef struct Node
    {
    	int data;
    	struct Node *next;
    }Node;
    
    //从尾部添加节点
    void AppendtoEnd(Node *head,int data)
    {
    	Node *new_node=NULL;
    	Node *temp=NULL;
    
    	new_node=malloc(sizeof(Node));
    	new_node->data=data;
    	new_node->next=NULL;
    
    	//找到最后一个节点
    	temp=head;
    	for(;temp->next!=NULL;temp=temp->next);
    	temp->next=new_node;
    }
    
    //打印链表
    void ShowList(Node *head)
    {
    	Node *temp=NULL;
    	if(head==NULL)
    	{
    		return ;
    	}
    	temp=head->next;
    	for(;temp!=NULL;temp=temp->next) 
    	{
    		printf("%d",temp->data);
    		printf("-->");
    	}
    	printf("
    ");
    }
    
    //实现找到倒数第k个节点
    Node *FindLastk(Node *head, int k)
    {
    	Node *first=head;
    	Node *second=head;
    	int i=0;
    	//前指针先走k步
    	for(i=0;i<k;i++) 
    	{
    		first=first->next;
    	}
    	//两个一起走,直到前指针非法
    	for(;first!=NULL;first=first->next,second=second->next);
    	return second;
    }
    
    int main(void)
    {
    	int i=0;
    	int k=10;
    	Node *k_node=NULL;
    	Node *head=malloc(sizeof(Node));
    	head->next=NULL;
    	
    	for(i=1;i<11;i++) 
    	{
    		AppendtoEnd(head, i);
    	}
    	ShowList(head);
    	if(k == 0) 
    	{
    		printf("NULL
    ");
    	}
    	else 
    	{
    		k_node=FindLastk(head, k);
    		printf("倒数第%d个节点是%d
    ",k,k_node->data);
    	}
    	free(head);
    	return 0;
    }
    

      

  • 相关阅读:
    Android studio关于点击事件后的页面跳转,选择完成后返回(onActivityResult)
    关于Android对话框简单实用方法总结
    Eclipse键盘输出文字,显示到屏幕上方法
    indexOf实际试用方法
    LiteOS裸机驱动移植01-以LED为例说明驱动移植
    LiteOS内核教程06-内存管理
    LiteOS内核教程05-互斥锁
    LiteOS内核教程04-信号量
    LiteOS内核教程03-任务管理
    LiteOS内核教程02-HelloWorld
  • 原文地址:https://www.cnblogs.com/jueshi0208/p/5546197.html
Copyright © 2011-2022 走看看