1.反转链表
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
/**
*
* @param pHead ListNode类
* @return ListNode类
*/
struct ListNode* ReverseList(struct ListNode* p ) {
// write code here
struct ListNode *t,*pre=NULL; //临时节点
while(p)
{
t = p->next;
p->next = pre;
pre = p;
p = t;
}
return p;
}
代码详解:
在不使用栈的情况下,一般思维就是直接反转,让原本指向的下一节点反过来指向节点自己,步骤如下:
pre为新链表结尾,p为原链表头指针
创建辅助节点t,方便p向后移动
让p指向下一节点的指针指向前一节点
各节点向后移开始反转下一个,不断重复直到到达原链表结尾(p指向了原链表结尾的NULL),此时pre指向了链表头,而p指向了NULL,因此结束。
2.
未完待续…