相对于翻转整个链表而言,主要是对head指针的初始化改为对应节点的next,及翻转的while判断对应到指定节点即可。
/************************************************************* reverse_list.c auther:yejing data:2014/10/21 creat file 1.0 2015/01/04 modified for partition reverse of a list 1.1 *************************************************************/ #include <stdio.h> #include <stdlib.h> typedef struct node_s{ int item; struct node_s* next; }node_t; void show_list(node_t* list); node_t* search_for_key_pointer(int n, node_t* head){ node_t* tmp = head; while(tmp){ if(n == tmp->item) return tmp; tmp = tmp->next; } return NULL; } node_t* reverse_part_of_list(node_t* head, int index){ if(!head) return; node_t* n = head; head = search_for_key_pointer(index, head)->next; while(n && n->item <= index){ node_t* m = n; n = n->next; m->next = head; head = m; } printf(" -----reverseing list-----\n"); return head; } node_t* creat(int n) { node_t* phead = (node_t*)malloc(sizeof(node_t)); if(!phead) return NULL; int i; node_t *p, *q; p = phead; phead->item = 1; for(i = 0; i < n - 1; ++i) { q = (node_t *)malloc(sizeof(node_t)); if(!q) return; p->next = q; q->item = i + 2; p = q; } return phead; } void show_list(node_t* list) { if(!list) return; while(list){ printf(" item of listnode is: %d \n", list->item); list = list->next; } return; } int main(int argc, char* argv[]) { node_t* list = creat(5); show_list(list); list = reverse_part_of_list(list, 4); show_list(list); return 1; }