反转单链表
假设单链表的数据结构定义如下:
typdef struct LNode { int data; struct LNode *next; }LNode, *LinkedList;
单链表有一个头指针list指向第一个节点,最后一个节点指向NULL
解法1:新建单链表
LinkedList ReverseSingglyLinkedList(LinkedList list) { LinkedList newList;//新建表的头结点 LNode *tmp;//指向list的第一个节点,也就是要摘除的结点 //增加代码健壮性 if(list == NULL || (newList = (LinkedList)malloc(sizeof(LNode))) == NULL) { return NULL; } //初始化newList newList->data = list->data; newList->next = NULL; while(list->next != NULL) { tmp = newList->next;//保存后继节点 newList->next = list->next;//将list的第一个节点放到newList中 list->next = list->next->next;//从list中摘除这个结点 newList->next->next = tmp;//活肤newList中的后续结点指针 } //释放原头结点,返回新头结点 free(list); return newList; }
解法2:修改next指针指向的结点,header->2->1->3->4+header->3->2->1->4......
LinkedList ReverseSinglyLinkedList(LinkedList list) { LNode *tmp = NULL; LNode *p = NULL; if(list == NULL) { return NULL; } tmp = list->next; while(tmp->next != NULL) { p = tmp->next; tmp->next = p->next; p->next = list->next; list->next = p; } return list; }

浙公网安备 33010602011771号