带头结点的单链表( 冒泡排序 一次遍历求中间结点的值) 链表 就地反转 倒数第k个结点
来源:互联网 发布:淘宝意外险 编辑:程序博客网 时间:2024/05/18 03:55
Source Code:
#include <iostream>using namespace std;typedef struct student{int num;struct student *next;}node;node *create(){//with head nodenode *head,*p,*s;//head -->head p-->end s -->middle node int num;head = new node[sizeof(struct student)];p=head;cin>>num;while(num!=-1){s = new node[sizeof(struct student)];s->num= num;p->next = s;p = s;cin>>num;}p->next = NULL;return head;}int print(node *l)//return the len of the linklist{node *p = l;int count = 0;p = p->next;while(p){cout<<p->num<<" ";p= p->next;count++;}cout<<endl;return count;}int GetLen(node *l){node *p = l;int count = 0;p = p->next;while(p){p= p->next;count++;}return count;}node *sort(node *l){//sort AESint len = GetLen(l);node *head = l;node *p;//move forwardint temp;for(int i = 0;i<len-1;i++){p = head->next;for(int j = 0;j<len-i-1;j++){if(p->num>p->next->num){temp = p->num;p->num = p->next->num;p->next->num = temp;}p = p->next;}}return head;}int GetCenterNode(node *l){//一次遍历求中间结点的值node *p2 = l;//two stepnode *p1 = l;//one stepwhile(1){p2 = p2->next->next;p1 = p1->next;if(p2->next == NULL)//len %2 ==0break;if(p2->next->next == NULL)//len %2 == 1{p1 = p1->next;break;}}return p1->num;}int main(){node *StudentLink = create();int len= GetLen(StudentLink);cout<<"len="<<len<<endl;node *Sorted_StudetLink = sort(StudentLink);// O(n) + O(n*n)cout<<"After sorting ..."<<endl;print(Sorted_StudetLink);cout<<"the list's center node data is "<<GetCenterNode(StudentLink)<<endl;//O(n)return 0;}
Result:
就地反转
ListNode* ReverseList(ListNode* pHead){ ListNode* pNode=pHead;//当前结点 ListNode* pPrev=NULL;//当前结点的前一个结点 while(pNode!=NULL) { ListNode* pNext=pNode->m_pNext; pNode->m_pNext=pPrev;//当前结点指向前一个结点 pPrev=pNode;//pPrev和pNode往前移动。 pNode=pNext;//这里要使用前面保存下来的pNext,不能使用pNode->m_pNext } return pPrev;//返回反转链表头指针。}
倒数第k个结点:
注意程序的鲁棒性
ListNode* KthNodeFromEnd(ListNode* pHead,int k){ if(pHead==NULL||k==0) return NULL; ListNode* pNode=pHead;//当前结点 ListNode* pKthNode=pHead;// while(k-1>0) { if(pNode->m_pNext!=NULL) { pNode=pNode->m_pNext;//让pNode先走k-1步 --k; } else return NULL; } while(pNode->m_pNext!=NULL) { pNode=pNode->m_pNext; pKthNode=pKthNode->m_pNext; } return pKthNode;}
0 0
- 带头结点的单链表( 冒泡排序 一次遍历求中间结点的值) 链表 就地反转 倒数第k个结点
- 有关单链表的两个问题【遍历一次求中间节点,倒数第K个结点】
- 单链表遍历一次求倒数第k个结点和中间结点
- 笔试面试,单链表相关(3)遍历一次找中间结点、倒数第K个结点
- 带头结点的单链表和不带头结点的单链表的倒数第K个节点
- 单链表的翻转&倒数第K个结点&中间结点&对齐打印
- 剑指offer(15)----求链表中的倒数第k个结点(扩展求链表的中间结点)
- 链表的倒数第K个结点(一次遍历)
- 【链表】C++快慢两个指针解决问题(分别求倒数第k个、中间以及环的入口结点)
- 求链表的倒数第K个结点
- 带头结点的单链表冒泡排序
- 找链表的中间结点和倒数第k个结点(链表笔试题面试题)
- 带头结点单链表的就地逆转
- 带头结点单链表的就地逆转
- 带头结点的单链表就地逆置
- 带头结点单链表的就地逆置
- 就地逆置带头结点的单链表
- 带头结点的单链表就地逆置
- 设计模式之策略模式笔记
- 黑马程序员 同步辅助类【Samphore】
- java学习历程——第一篇.如何使用java软件
- Matlab柱坐标相关问题
- U-Boot移植之前期分析(上)
- 带头结点的单链表( 冒泡排序 一次遍历求中间结点的值) 链表 就地反转 倒数第k个结点
- 语言文件.po .pot和.mo简介及汉化
- 【Linux 入门笔记】使用fdisk进行磁盘管理
- 陆奇讲座记录与感想
- TabActivity中onKeyDown无法响应的解决方法及连续点击两次退出应用程序
- 冒泡排序法C语言实现
- Java中队Excel操作的PIO实例
- [Unity+IOS]IOS真机测试
- 字符串的特殊性