单链表link
03 Jan 2014
|
#include <stdio.h>
#include <stdlib.h>
struct ListNode
{
void *data;
ListNode *next;
};
struct sList
{
ListNode *head;
int len;
};
void printList(sList *list)
{
ListNode *p = list->head->next;
int *data = NULL;
while(p != NULL){
data = (int*)(p->data);
printf("%d ", *data);
p = p->next;
}
printf("\n");
}
sList *createList()
{
sList *list = (sList*)malloc(sizeof(sList));
list->head = (ListNode*)malloc(sizeof(ListNode));
list->head->data = NULL;
list->len = 0;
return list;
}
int listInsert(sList *list, void *data)
{
ListNode *item = (ListNode*)malloc(sizeof(ListNode));
item->data = data;
item->next = list->head->next;
list->head->next = item;
return 0;
}
int ListReverse(sList* L)
{
ListNode *current, *pnext, *prev;
current = L->head->next;
pnext = current->next;
current->next = NULL;
while(pnext)
{
prev = pnext->next;
pnext->next = current;
current = pnext;
pnext = prev;
printf("after change:current = %d,next = %d \n",*(int *)(current->data),*(int*)(current->next->data) );
}
L->head->next = current;
return 0;
}
sList *ListReverse1(sList *L)
{
sList *list = (sList*)malloc(sizeof(sList));
list->head = (ListNode*)malloc(sizeof(ListNode));
list->head->data = NULL;
list->len = 0;
ListNode *p = L->head->next;
ListNode *next;
while(p)
{
next = p->next;
p->next = list->head->next ;
list->head->next = p;
p = next;
}
free(L);
return list;
}
int main()
{
int a[]={1,2,3,8,7,6,5,6,7,8,5};
sList *list = createList();
for(int i=0; i<11; i++) {
int *data = (int*)malloc(sizeof(int));
*data = a[i];
listInsert(list, (void*)(data));
}
printList(list);
sList *newList = ListReverse1(list);
printList(newList);
}