翻转链表如果是需要在本地翻转,则通常需要设置多个指针来实现;如果对内存没有要求,则可以新建立一个链表,将原始链表通过头插法插入新链表中
1 使用新链表头插法
/** * struct ListNode { * int val; * struct ListNode *next; * }; */ /** * * @param pHead ListNode类 * @return ListNode类 */ struct ListNode* ReverseList(struct ListNode* pHead ) { // write code here if (pHead == NULL) { return NULL; } //创建新链表 struct ListNode* pRes = NULL, *q = pRes; struct ListNode* p = pHead; //遍历初始列表,并使用头插法插入新链表中 while (p) { q = pRes; pRes = (struct ListNode*)malloc(sizeof(struct ListNode)); if (pRes == NULL) { break; } pRes->val = p->val; pRes->next = q; p = p->next; } //返回新链表头部 return pRes; }