相对于翻转整个链表而言,主要是对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;
}
本文介绍了一种链表操作——局部反转的方法。通过修改head指针并利用特定节点进行while循环判断,实现对链表中部分节点的反转。文章提供了一个C语言实现的例子,并展示了如何寻找特定节点并进行反转。
767

被折叠的 条评论
为什么被折叠?



