(1)链表的反转
原先的链表保留一个头结点head,通过该头结点可以遍历链表的每一个结点里内容,如果在链表遍历的过程中,再用两个指针把把链表里的内容指针的指向改变,使原先指向下一个节点的,改为指向它的前一个节点,就可以实现链表的反转了!
#include
#include
struct llist
{
int num;
struct llist *next;
};
typedef struct llist node ;
typedef node *llink;
void printllist(llink ptr)
{
while(ptr!=NULL)
{
printf("[%d]",ptr->num);
ptr=ptr->next;
}
printf("\n");
}
llink createllist(int *array,int len)
{
llink head;
llink ptr,ptr1;
int i;
head=(llink)malloc(sizeof(node));
if(!head)
return NULL;
head->num=array[0];
head->next=NULL;
ptr=head;
for(i=1;i { ptr1=(llink)malloc(sizeof(node)); if(!ptr1) return NULL; ptr1->num=array[i]; ptr->next=NULL; ptr->next=ptr1; ptr=ptr->next; } return head; } //链表反转的实现过程 llink invertllist(llink head) { llink mid,last; mid=NULL; while(head!=NULL) { last=mid; mid=head; head=head->next; mid->next=last; } return mid; } void freellist(llink head) { llink ptr; while(head!=NULL) { ptr=head; head=head->next; free(ptr); } } int main() { int llist[6]={1,2,3,4,5,6}; llink head; head=createllist(llist ,6); if(!head) { exit(1); } printllist(head); head=invertllist(head); printllist(head); printllist(head); return 0; } 分享到: