NC78:反转链表
输入一个链表,反转链表后,输出新链表的表头
方法一:递归
每次递归后返回值都是header,即头指针,但每次pHead是不一样的
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
/**
*
* @param pHead ListNode类
* @return ListNode类
*/
struct ListNode* ReverseList(struct ListNode* pHead ) {
if(NULL == pHead) return pHead;
if(NULL == pHead->next) return pHead;
struct ListNode* header = ReverseList(pHead->next);
struct ListNode* pp = pHead->next;
pp->next = pHead;
pHead->next = NULL;
return header;
}
方法二:迭代
用三个指针定位,指针a和指针b用来连接,指针c用来前方带队
最后输出指针a,整体输出
struct ListNode* ReverseList(struct ListNode* pHead ) {
if(NULL == pHead) return pHead;
if(NULL == pHead->next) return pHead;
struct ListNode* a = pHead;
struct ListNode* b = pHead->next;
struct ListNode* c = pHead->next->next;
while(b){
c = b->next;
b->next = a;