题目是剑指offer上的。一种思路是,使用两个指针,第一个指针,走k-1步,之后第二个指针也开始运行,当第一个指针走到链表尾部时,第二个指针所指的位置就是倒数第k个结点。代码如下,略有点乱,思路是清晰的。这里求的是倒数第三个结点。
#include <stdio.h> #include <string.h> typedef struct Node{ int num; struct Node *next; }NodeHead,*Nodes; void DeleteNode(Nodes head,int index){ if(head->next==NULL) return; if(index<1||index>8) return; Nodes p1,p2; p1 = p2 = head->next; int i = 0; while(i<(index-1)){ if(p1->next!=NULL){ p1 = p1->next; i++; } else{ return; } } while(p1->next!=NULL){ p1 = p1->next; p2 = p2->next; } printf("%d",p2->num); } void main() { Nodes head = NULL; head = (Nodes)malloc(sizeof(NodeHead)); head->next = NULL; int i ; for(i = 8 ;i >= 1 ; i--){ Nodes node = (Nodes)malloc(sizeof(NodeHead)); node->num = i; node->next = head->next; head->next = node; } DeleteNode(head,3); return 0; }