day02逆置/反转单链表+查找单链表的倒数第k个节点+实现一个Add函数不用四则运算
2017-07-15 10:50
591 查看
逆置/反转单链表,要求只能遍历一次链表
查找单链表的倒数第k个节点,要求只能遍历一次链表
struct Node { Node *next; int value; Node(int val):value(val),next(NULL){ } }; //方式一: void Reverse(Node *&phead) { if(phead == NULL || phead->next == NULL) return ; Node *pcur = phead->next; Node *pre = phead; while(pcur) { Node *pnext = pcur->next; pcur->next = pre; pre = pcur; pcur = pnext; } phead->next = NULL; //最后把指针域制空 phead = pre; } //方式二:用栈去实现逆置。 void Reverse2(Node *&phead) { if(phead == NULL || phead->next == NULL) return ; stack<Node*> s; Node *pcur = phead; while(pcur->next) //此时pcur指向最后一个元素,也就是逆置后的首元素。 { s.push(pcur); pcur= pcur->next; } phead = pcur; while(!s.empty()) { Node *ptemp = s.top(); pcur->next = ptemp; pcur = ptemp; s.pop(); } pcur->next = NULL; } void Reverse3( Node *&phead) { if(phead == NULL || phead->next == NULL) return ; Node *pNewHead = phead; Node *pcur = phead->next; pNewHead->next = NULL; //先把头结点的指针域制空 while(pcur) { Node *pnext = pcur->next; //pnext = pcur->next这句话别放在最后面,放在最后面,pcur =pnext=NULL,此时pnext = NULL->next,程序崩溃。 pcur->next = pre; pre = pcur; pcur = pnext; } phead = pNewHead; }
查找单链表的倒数第k个节点,要求只能遍历一次链表
struct ListNode { int val; ListNode *next; ListNode(int x):val(x),next(NULL) { } }; ListNode *FindKthToTail(const ListNode *pListHead, int k) { assert(pListHead && k > 0); const ListNode *pFast = pListHead; while(k--) { if(pFast == NULL) return NULL; pFast = pFast->next; } const ListNode *pSlow = pListHead; while(pFast) { pFast = pFast->next; pSlow = pSlow->next; } return (ListNode*)pSlow; }
实现一个Add函数,让两个数相加,但是不能使用+、-、*、/等四则运算符。ps:也不能用++、--等等
//一个数相加分三步:5+17 第一步:各个位相加5+7=12,个位为2,1+0=1,十位为1,第二步做进位,5+7进位为10,第三步12+10=22(也就是重复一二步) int Add(int num1, int num2) { while(num2 != 0) //进位不为0 { int temp1 = (num1^num2); //各个位相加 int temp2 = (num1&num2)<<1; //进位 num1 = temp1; num2 = temp2; } return num1; }
相关文章推荐
- 逆置,查找倒数第K个节点,Add函数不用四则运算的实现
- 建立一个带附加头结点的单链表.实现测长/打印/删除结点/插入结点/逆置/查找中间节点/查找倒数第k个节点/判断是否有环
- 17_7_14:逆置单链表+查找单链表的倒数第K个节点+非常规方法实现Add函数
- C语言:【单链表】查找单链表的倒数第k个节点,要求只能遍历一次
- 反转单链表+求单链表倒数第k个节点+不用加减乘除做加法
- Java单链表基本操作(五)--查找倒数第K个节点
- C++实现单链表删除倒数第k个节点的方法
- 查找单链表倒数第K个节点和以及逆置单链表
- 20140719 找到单链表的倒数第K个节点 判断一个链表是否成为一个环形 反转
- 查找单链表的倒数第k个节点,要求只能遍历一次链表
- 查找单链表的倒数第k个节点,要求只能遍历一次链表(C语言)
- 逆置/反转单链表+查找单链表的倒数第k个节点,要求只能遍历一次链表
- C实现简单单向链表,一次遍历查找倒数第k个节点的值
- 编写一个程序,实现删除链表中倒数第k个节点(用单链表实现)
- 链表--查找单链表的倒数第k个节点,要求只能遍历一次链表
- 剑指offer 15---查找单链表的倒数第k个节点,要求只能遍历一次链表
- 查找单链表的倒数第k个节点
- 逆置/反转单链表+查找单链表的倒数第k个节点,要求只能遍历一次链表
- 反转单链表+合并有序单链表+查找单链表中倒数第k个节点--20150924
- 在一个链表中,查找倒数的第k个节点